【问题标题】:Spark SQL statement broadcastSpark SQL 语句广播
【发布时间】:2019-03-27 20:46:52
【问题描述】:

有没有办法在 Spark SQL 语句中使用广播?

例如:

SELECT
    Column
FROM
    broadcast (Table 1)
JOIN
    Table 2
ON
    Table1.key = Table2.key

在我的例子中,表 1 也是一个子查询。

【问题讨论】:

    标签: sql apache-spark


    【解决方案1】:

    广播连接的语法如下:

    SELECT /*+ BROADCAST(Table 2) */ COLUMN
    FROM Table 1 join Table 2
    on Table1.key= Table2.key
    
    1. 要检查是否发生广播连接,您可以在 SQL 选项卡中检查 Spark UI 端口号 18080。

    2. 我们需要确保广播连接是否实际工作的原因是因为之前我们使用了以下语法: /* BROADCASTJOIN(Table2) */ 没有抛出语法错误,但在 UI 中它正在执行排序合并连接

    3. 因此,必须确保我们的联接按预期工作

    【讨论】:

    • 感谢您的解决方案。但是,它不会只是提示优化器吗?如果我们想强制它执行广播怎么办?
    【解决方案2】:

    在 Spark 2.2 或更高版本中,您可以使用规划器提示:

    SELECT  /*+ MAPJOIN(Table1) */ COLUMN
    FROM Table1 JOIN Table2
    ON Table1.key = Table2.key
    

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多