【发布时间】:2016-12-08 09:40:02
【问题描述】:
我想平衡 Spark 中 rdds/dataframes 的分区大小,以摆脱拖慢我工作速度的落后任务。我可以使用repartition(n_partition) 来做到这一点,它会创建大小相当一致的分区。但是,这涉及昂贵的洗牌。
我知道coalesce(n_desired_partitions) 是一种更便宜的替代方案,它避免了洗牌,而是在同一个执行程序上合并分区。但是,我不清楚这个函数是尝试创建大致统一大小的分区,还是简单地合并输入分区而不考虑它们的大小。
例如,假设以下我们在三个分区中具有 [1,12] 范围内的整数的 Rdd,如下所示:[(1,2,3,4,5,6,7,8),(9,10),(11,12)]。假设这些都在同一个执行程序上。
现在我打电话给rdd.coalesce(2)。权力合并的算法是否知道合并两个小分区(因为它们更小并且我们想要平衡的分区大小),而不是仅仅合并两个任意分区?
在别处讨论这个话题
根据this presentation(跳至 7:27),Netflix 大数据团队需要实现一个自定义的合并函数来平衡分区大小。另见SPARK-14042。
为什么这个问题不重复
关于分区和合并之间的区别有一个更普遍的问题here,但没有人解释支持合并的算法是否尝试平衡分区大小。
【问题讨论】:
标签: apache-spark