【问题标题】:Spark Join optimizationSpark Join 优化
【发布时间】:2020-03-24 08:22:42
【问题描述】:

假设我有两个要使用“inner 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-spark join pyspark apache-spark-sql


    【解决方案1】:

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

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

    result.explain()
    

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

    参考 - Pyspark documentation 用于解释功能。

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 2011-02-14
      • 2021-12-06
      • 2014-01-05
      相关资源
      最近更新 更多