首页 > 解决方案 > Spark Join 优化

问题描述

假设我有两个要使用“内部连接”连接的数据框:A 和 B,每个都有 100 列和数十亿行。

如果在我的用例中我只对 A 的 10 列和 B 的 4 列感兴趣,Spark 是否会为我进行优化以处理此问题并只打乱 14 列,还是他会打乱所有内容然后选择 14 列?

查询 1:

A_select = A.select("{10 columns}").as("A")
B_select = B.select("{4 columns}").as("B")
result = A_select.join(B_select, $"A.id"==$"B.id")

查询 2:

A.join(B, $"A.id"==$"B.id").select("{14 columns}")

Query1==Query2 在行为、执行时间、数据洗牌方面是否?

提前感谢您的回答:

标签: apache-sparkjoinpysparkapache-spark-sql

解决方案


是的,spark 将为您处理优化。由于它的惰性评估行为,只会从数据框(A 和 B)中选择所需的属性。

您可以使用explain功能查看逻辑/物理计划,

result.explain()

两个查询都将返回相同的物理计划。因此执行时间和数据混洗将是相同的。

参考 -解释功能的Pyspark 文档


推荐阅读