我读过很多关于 Spark 分桶的文章,但仍然无法清楚地了解它。但此外,到目前为止我所理解的是“分桶就像分区内的分区,它用于具有非常高基数的候选者,这有助于避免重新洗牌操作”。
即使在 Spark 文档中,也找不到足够的解释。粘贴文档中的示例
peopleDF.write.bucketBy(42, "姓名").sortBy("年龄").saveAsTable("people_bucketed")
这里无法理解数字“42”是如何决定分桶的。请帮助理解同样的内容。另外,任何关于分桶的更清晰的解释也很棒。
42就像生命的意义是什么?因此举个例子。
Spark Bucketing 对于 Spark 中的 ETL 非常方便,其中 Spark 作业 A 根据 Bucketing def 写出 t1 的数据,Spark 作业 B 同样写出 t2 的数据,Spark 作业 C 使用 Bucketing 定义连接 t1 和 t2,从而避免了洗牌(也称为交换)。优化。
没有通用公式。这取决于数量、可用的执行者等。要点是避免洗牌。作为指导,JOINing 和 AGGr 的默认值设置为 200,因此 200 或更大可能是一种方法,但同样,您的集群上有多少资源?
但为了满足您对知识的追求,有人可能会说 42 实际上应该设置为您分配给 Spark 作业/应用程序的执行器数量(= 1 个核心),而忽略倾斜问题。
| 归档时间: |
|
| 查看次数: |
1880 次 |
| 最近记录: |