【问题标题】:Are there any drawbacks of using left join of smaller table with larger table vs inner join of two tables and right joining smaller table?使用较小表的左连接和较大的表与两个表的内连接和右连接较小的表有什么缺点吗?
【发布时间】:2021-11-15 21:09:24
【问题描述】:

假设我有 2 张桌子,

  • 一个(1000 行)
  • B(1B 行)

左表:A 右表:B

我需要将 A 与 B 左连接,因为我希望 A 的所有行都保留在输出中。

正如预期的那样,如果我在进行左连接,我们无法广播 A(以加快速度)。

D = A.join(B,'key','left)

所以,我一直在做 A & B 的内部连接,它允许广播。中间输出,比如 C,是小得多的表。然后我离开了加入A和C。 根据我的经验,这要快得多,并且使用的资源也更少。

C = B.join(F.broadcast(A),'key','inner')
D = C.join(A, 'key','right')

这种方法有什么缺点吗?错过了边缘情况?

【问题讨论】:

    标签: apache-spark pyspark hive apache-spark-sql


    【解决方案1】:

    如果keyA 中是唯一的,那么这应该可以工作。

    但是,如果键重复,您可以增加行数。

    这可能是left join 的编译器中未内置此优化的方式。即使密钥是重复的,您也可以(通过更多努力)让您的方法发挥作用。

    【讨论】:

      猜你喜欢
      • 2019-03-30
      • 2022-09-27
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      • 2014-08-31
      • 2021-03-10
      • 2023-04-09
      相关资源
      最近更新 更多