0

当我像这样使用左连接连接两个数据框时:

df1.join(broadcast(df2), $"id" === $"id1" || $"id2" === $"id3", "left")

没有$"id2" === $"id3",它执行得非常快,但是当这两个条件都存在时,它会BroadcastNestedLoopJoin变得非常慢。

有什么想法可以改进吗?

4

1 回答 1

4

BroadcastNestedLoopJoin 意味着嵌套的for循环来加入你的数据帧。它总是会降低性能。

您可以尝试以下解决方案:

val resultPart1 = df1.join(broadcast(df2), $"id" === $"id1" ", "left")
val resultPart2 = df1.join(broadcast(df2),  $"id2" === $"id3", "left")

val resultDF = resultPart1.unionByName(resultPart2)

联合导致跨执行者的数据零改组。因此产生更快的结果

于 2020-07-16T03:12:43.540 回答