在将RDD写入文件之前立即执行以下转换时,它们之间有什么区别?
代码示例:
val input = sc.textFile(inputFile)
val filtered = input.filter(doSomeFiltering)
val mapped = filtered.map(doSomeMapping)
mapped.coalesce(1, shuffle = true).saveAsTextFile(outputFile)
vs
mapped.coalesce(1, shuffle = false).saveAsTextFile(outputFile)
以及它与collect()相比如何?我完全知道,Spark保存方法将以HDFS样式的结构存储它,但是我对collect()和改组/未改组/未改组的coalesce()的数据分区方面更感兴趣。
最佳答案
shuffle = true和shuffle = false不会在结果输出中产生任何实际差异,因为它们都将下降到单个分区。但是,将其设置为true时,将进行无用的随机播放。使用shuffle = true时,输出均匀地分布在各个分区之间(如果需要,您还可以增加分区的数量),但是由于目标是1个分区,因此所有结果最终都将集中在一个分区中。
至于与collect()的比较,区别在于所有数据都存储在单个执行程序上,而不是存储在驱动程序上。
关于scala - Apache Spark中的混洗与非混洗合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899710/