'saveAsTextFile'方法的奇怪行为

时间:2014-10-14 11:59:48

标签: apache-spark

我有这样的代码:

val relationships: RDD[String] = ....
relationships.saveAsTextFile("/tmp/result")

我希望' saveAsTextFile'方法可以保存关系'提交' / tmp / result'。 但它创建了文件夹' / tmp / result /'并放置了许多名称为part-00000,part-00001等的文本文件。 这种方法的正常行为是什么?

2 个答案:

答案 0 :(得分:5)

原因是它将其保存为多个文件,因为计算是分布式的。

如果您需要使用saveAsTextFile保存文件,则可以使用  coalesce(1,true).saveAsTextFile();

这基本上意味着进行计算,然后将其合并为1个分区。您还可以使用repartition(1),它只是coalesce()的包装器,其suffle参数设置为true。

作为替代方案,如果您的数据适合一个分区,您可以收集您的rdd,然后保存该数组。

答案 1 :(得分:0)

这并不奇怪,正如蒂姆所说,因为计算是分布式的,所以表现得很好。

我只想补充一点,如果您的RDD太大,运行合并可能不是一个好主意