【问题标题】:Broadcast Join in Spark SQLSpark SQL 中的广播联接
【发布时间】:2020-07-21 20:08:07
【问题描述】:

我是 Spark 的新手,对广播连接有疑问。我们使用 Spark 2.4.0 并使用 Spark Temporary Views 进行数据转换 -

create temporary view product as
select /*+ BROADCAST(b) */
a.custid, b.prodid
from cust a
join prod b
on a.prodid = b.prodid

我知道broadcast 有一个参数加入spark.sql.autoBroadcastJoinThreshold,其值为10,即10MB。但是,我还在某处读到广播表的最大大小可能是8GB。这两个值有什么意义?

对于广播表/视图,大小是否总是必须在MB 中,或者是否也可以广播(带有提示)5GB 的表/视图(例如)?在这种情况下,我是否必须通过将参数spark.sql.autoBroadcastJoinThreshold 设置为更高的值(=51205GB)来操纵参数的值?或者,它是否允许我广播表格/视图,因为它低于最大限制(即8GB)?

如果我想广播一个表(以 GB 为单位),从查询性能的角度是否建议这样做?

感谢任何帮助。

谢谢

【问题讨论】:

    标签: apache-spark-sql


    【解决方案1】:
    • 如果您没有在 via DF 语法的 SQL 中明确声明通过提示进行广播,那么对于已知大小为 10MB 的表,Catalyst 可能会选择使用广播连接方法。

    • 如果您明确声明了广播连接,那么如果表大小超过 8GB,Catalyst 将忽略并使用另一个连接策略而不是广播连接。

    • 更正式地说:

    如果指定了广播提示,则带有提示的加入方将是 不论 autoBroadcastJoinThreshold 广播。如果双方 加入的有广播提示,小一点的一边 估计的物理尺寸将被广播。如果没有提示和 如果表的估计物理大小

    我应该广播吗?是的,如果这意味着查询更快并且有足够的资源(共享)。

    【讨论】:

    • 感谢您的回复.. 广播大小为 GB(当然
    • 如果你有资源而且速度更快,那就去吧
    猜你喜欢
    • 2020-12-29
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多