我正在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中。
暂无答案!
目前还没有任何答案,快来回答吧!