gpt4 book ai didi

python - Spark 中的分区和分桶有什么区别?

转载 作者:行者123 更新时间:2023-12-03 16:23:03 24 4
gpt4 key购买 nike

我尝试优化两个 spark 数据帧之间的连接查询,我们称它们为 df1、df2(在公共(public)列“SaleId”上连接)。
df1 非常小(5M),所以我在 spark 集群的节点之间广播它。
df2 非常大(200M 行),所以我尝试通过“SaleId”对其进行存储/重新分区。

在 Spark 中,按列分区数据和按列分桶数据有什么区别?

例如:

分割:

df2 = df2.repartition(10, "SaleId")

桶:
df2.write.format('parquet').bucketBy(10, 'SaleId').mode("overwrite").saveAsTable('bucketed_table'))

在每种技术之后,我刚刚将 df2 与 df1 结合在一起。

我不知道哪一个是正确的技术。
谢谢

最佳答案

repartition is for using as part of an Action in the same Spark Job.

bucketBy is for output, write. And thus for avoiding shuffling in the next Spark App, typically as part of ETL. Think of JOINs. See https://databricks-prod-cloudfront.cloud.databricks.com/public/4027ec902e239c93eaaa8714f173bcfc/4861715144695760/2994977456373837/5701837197372837/latest.html which is an excellent concise read. bucketBy tables can only be read by Spark though currently.

关于python - Spark 中的分区和分桶有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56857453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com