Spark saveAsTextFile()写入多个文件而不是一个

时间:2016-02-17 00:09:08

标签: scala apache-spark

此时我正在笔记本电脑上使用Spark和Scala。

当我将RDD写入文件时,输出将写入两个文件“part-00000”和“part-00001”。如何强制Spark / Scala 写入一个文件

我的代码目前是:

myRDD.map(x => x._1 + "," + x._2).saveAsTextFile("/path/to/output")

removing the parentheses写出关键值对。

1 个答案:

答案 0 :(得分:13)

“问题”确实是一个功能,它是由RDD分区的方式产生的,因此它在n部分中分开,其中n是分区数。要解决此问题,您只需使用RDD上的repartition将分区数更改为一个。文档说明:

  

重新分区(numPartitions)

     

返回一个具有完全numPartitions分区的新RDD。

     

可以增加或减少此RDD中的并行度。在内部,它使用shuffle重新分配数据。如果你是   减少此RDD中的分区数量,请​​考虑使用   合并,可以避免进行洗牌。

例如,此更改应该有效。

myRDD.map(x => x._1 + "," + x._2).repartition(1).saveAsTextFile("/path/to/output")

正如文档所说,您也可以使用coalesce,这在减少分区数量时实际上是推荐的选项。但是,将分区数量减少到一个被认为是一个坏主意,因为它会导致数据混乱到一个节点并失去并行性。