scala - Apache Spark中的混洗与非混洗合并

标签 scala apache-spark distributed-computing

在将RDD写入文件之前立即执行以下转换时,它们之间有什么区别?

  • coalesce(1,shuffle = true)
  • coalesce(1,shuffle = false)

  • 代码示例:
    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/

    相关文章:

    apache-spark - 未使用的 Spark worker

    java - 集群中的spring boot应用程序

    linux - 多核处理器核心通信速度

    java - 将两个 SOAP 服务合二为一的首选设计 "transaction"

    algorithm - 为什么这不能递归工作?

    scala - 如何使用 play iteratees 创建无限枚举器

    scala - 如何将 DataFrame 的所有列(使用嵌套结构类型)转换为 Spark 中的字符串

    amazon-web-services - 内存警告空间不足,无法缓存 rdd

    java - 为什么我不能从 Scala 访问在实现 Java 接口(interface)的类中声明的变量?

    json - Play Json 单字段读取验证器