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

sta*_*010 5 scala apache-spark

我现在正在笔记本电脑上使用Spark和Scala.

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

我的代码目前是:

myRDD.map(x => x._1 + "," + x._2).saveAsTextFile("/path/to/output")
Run Code Online (Sandbox Code Playgroud)

在哪里我删除括号以写出键值对.

Alb*_*nto 13

"问题"确实是一个特征,它是由你RDD的分区方式产生的,因此它是以分区数分开的n部分n分开的.要解决这个问题,您只需要在您的分区上使用重新分区将分区数更改为1 RDD.文件说明:

重新分区(numPartitions)

返回一个具有正确numPartitions分区的新RDD.

可以增加或减少此RDD中的并行度.在内部,它使用shuffle重新分配数据.如果要减少此RDD中的分区数,请考虑使用coalesce,这可以避免执行shuffle.

例如,此更改应该有效.

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

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