spark作业在AmazonEMR集群中运行时未将rdd写入文件

eblbsuwk  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(157)

我正在aws emr集群中运行javaspark程序,在将javardd写入文件时遇到问题。我有如下代码:

final JavaRDD<MyObject> javaRdd1 = // implemented here
javaRdd1.map(t -> MyClass.writeValueAsString(t)).saveAsTextFile(path1, GzipCodec.class);

当我在spark中运行这个程序时,javardd1总是将一系列空gz文件写入path1。但是,如果我添加对first()的调用,如下所示:

final JavaRDD<MyObject> javaRdd1 = // implemented here
log.info("javaRdd1 " + (javaRdd1.isEmpty() ? "not here" : javaRdd1.first()));
javaRdd1.map(t -> MyClass.writeValueAsString(t)).saveAsTextFile(path1, GzipCodec.class);

那么javardd1编写的gz文件不是空的。除了log语句之外,逻辑上没有区别。
代码中还有其他javardd,我用同样的方法保存到文件中。这些javardd编写非空gz文件;如果我将调用添加到first(),则它们的文件大小会增加。当用相同的参数在本地运行程序时,我看不到这种行为。在本地,文件总是完全按照预期打印出来。
注:所有输入和输出都存储在hdfs中。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题