我现在正在笔记本电脑上使用Spark和Scala。
当我将RDD写入文件时,输出将被写入两个文件"part-00000“和"part-00001”。如何强制Spark / Scala向写入一个文件
我的代码是:
myRDD.map(x => x._1 + "," + x._2).saveAsTextFile("/path/to/output")
我在哪里写移除括号键,值对。
发布于 2016-02-16 16:17:20
“问题”确实是一个特性,它是由RDD
的分区方式产生的,因此它在n
部件中分离,其中n
是分区的数量。要解决这个问题,只需在您的再分割上使用RDD
将分区的数量更改为一个。这些文件指出:
重分区(NumPartitions) 返回一个具有完全numPartitions分区的新RDD。 可以增加或减少此RDD中的并行级别。在内部,这会使用洗牌来重新分发数据。如果您正在减少此RDD中的分区数量,请考虑使用合并,这样可以避免执行洗牌。
例如,这个更改应该有效。
myRDD.map(x => x._1 + "," + x._2).repartition(1).saveAsTextFile("/path/to/output")
正如文档所述,您也可以使用聚结,这实际上是在减少分区数量时推荐的选项。但是,将分区数量减少到一个分区被认为是个坏主意,因为它会导致数据被洗牌到一个节点,并失去并行性。
https://stackoverflow.com/questions/35445486
复制