我是新来的星火,有一个关于广播Joins的问题。我们使用Spark2.4.0和使用Spark临时视图进行数据转换-
create temporary view product as
select /*+ BROADCAST(b) */
a.custid, b.prodid
from cust a
join prod b
on a.prodid = b.prodid我知道broadcast joins spark.sql.autoBroadcastJoinThreshold有一个参数,它的值为10,即10MB。但是,我也在某个地方读到广播表的最大大小可以是8GB。这两种价值观的意义何在?
对于广播表/视图,大小是否总是必须在MB中,或者,是否也可以广播(带有提示) 5GB的表/视图(例如)?在这种情况下,我是否必须通过将参数spark.sql.autoBroadcastJoinThreshold设置为更高的值(=5120,即5GB)来操作它的值?或者,它允许我广播表/视图,因为它是低于最大限度(即8GB)?
如果我想广播一个表(以GBs),是否从查询性能的角度推荐它?
任何帮助都是非常感谢的。
谢谢
发布于 2020-07-21 12:08:07
如果您确实显式地声明了一个广播连接,那么如果表大小超过8GB,催化剂将忽略并使用广播连接上的另一个连接策略。
更正式的
如果指定了广播提示,则不管autoBroadcastJoinThreshold如何,都会广播带有该提示的连接端。如果连接的两边都有广播提示,估计物理尺寸较小的侧将被广播。如果没有提示,如果表的估计物理大小< autoBroadcastJoinThreshold,则该表将广播到所有执行器节点。
我是否应该广播“是的,如果这意味着查询更快,并且有足够的资源(共享)。
https://stackoverflow.com/questions/63013769
复制相似问题