首页 > 解决方案 > 在 spark 中执行 join 时,是否可以使用 join 语句条件来过滤行而不是 shuffle?

问题描述

假设我有以下加入语句:

leftTable.join(
    rightTable,
    leftTable(joinColumn) =!= null and leftTable(joinColumn) === rightTable(joinColumn),
    "left_outer"
)

火花是否会在 leftTable 的连接列中对具有空值的行进行洗牌?

我最近遇到了一个偏差,并试图确定它是否可能是因为空值。因此,在这种情况下,我想知道 spark 是否在改组之前评估它可以进行的任何连接语句以最小化改组,或者它是否首先改组并在匹配两个表时评估所有内容。

标签: apache-sparkjoinpartitioningskew

解决方案


如果它不影响您的功能,您可以简单地在 leftTable 数据框上添加过滤器。

leftTable
.where(leftTable(joinColumn) =!= null)
.join(
    rightTable,
    leftTable(joinColumn) === rightTable(joinColumn),
    "left_outer"
)

推荐阅读