我有这样的代码:
val relationships: RDD[String] = ....
relationships.saveAsTextFile("/tmp/result")
我希望' saveAsTextFile'方法可以保存关系'提交' / tmp / result'。 但它创建了文件夹' / tmp / result /'并放置了许多名称为part-00000,part-00001等的文本文件。 这种方法的正常行为是什么?
答案 0 :(得分:5)
原因是它将其保存为多个文件,因为计算是分布式的。
如果您需要使用saveAsTextFile保存文件,则可以使用
coalesce(1,true).saveAsTextFile();
。
这基本上意味着进行计算,然后将其合并为1个分区。您还可以使用repartition(1)
,它只是coalesce()
的包装器,其suffle参数设置为true。
作为替代方案,如果您的数据适合一个分区,您可以收集您的rdd,然后保存该数组。
答案 1 :(得分:0)
这并不奇怪,正如蒂姆所说,因为计算是分布式的,所以表现得很好。
我只想补充一点,如果您的RDD太大,运行合并可能不是一个好主意