我尝试优化两个 Spark 数据帧之间的联接查询,我们称它们为 df1、df2(在公共列“SaleId”上联接)。
df1非常小(5M),所以我在spark集群的节点之间广播它。
df2 非常大(200M 行),所以我尝试通过“SaleId”对其进行存储/重新分区。
在Spark中,按列分区数据和按列存储数据有什么区别?
例如:
分割:
df2 = df2.repartition(10, "SaleId")
bucket:
df2.write.format('parquet').bucketBy(10, 'SaleId').mode("overwrite").saveAsTable('bucketed_table'))
在每一种技术之后,我只是将 df2 与 df1 结合起来。
我不知道哪一个是正确的技术。
谢谢
重新分区用作 Action 中的一部分same火花工作。
bucketBy用于输出,写入。因此为了避免洗牌nextSpark App,通常作为 ETL 的一部分。想想 JOIN。
看https://databricks-prod-cloudfront.cloud.databricks.com/public/4027ec902e239c93eaaa8714f173bcfc/4861715144695760/2994977456373837/5701837197372837/latest.html https://databricks-prod-cloudfront.cloud.databricks.com/public/4027ec902e239c93eaaa8714f173bcfc/4861715144695760/2994977456373837/5701837197372837/latest.html这是一本极好的简洁读物。 BucketBy表只能读取
目前由 Spark 提供。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)