Spark SQL是否包含用于连接的表流优化?

时间:2015-08-20 20:15:54

标签: apache-spark apache-spark-sql

Spark SQL是否包含连接的表流优化,如果是,它如何决定要流哪个表?

在进行连接时,Hive假设最后一个表是最大的表。作为连接优化,它将尝试缓冲较小的连接表并流式传输最后一个连接表。如果连接列表中的最后一个表不是最大的表,则Hive具有/*+ STREAMTABLE(tbl) */提示,告知它应该流式传输的表。从v1.4.1开始,Spark SQL不支持STREAMTABLE提示。

此问题已被要求在Spark SQL here之外进行正常的RDD处理。答案不适用于开发人员无法控制显式缓存操作的Spark SQL。

2 个答案:

答案 0 :(得分:3)

我前段时间已经找到了这个问题的答案,而我所能想到的就是设置spark.sql.autoBroadcastJoinThreshold参数,默认情况下为10 MB。然后,它将尝试自动广播所有大小小于您设置的限制的表。加入订单在此处不起作用。

如果您有兴趣进一步提高加入效果,我强烈推荐this presentation

答案 1 :(得分:1)

这是即将推出的 Spark 2.3 RC2 正在为下一个版本投票)。

  

从v1.4.1开始,Spark SQL不支持STREAMTABLE提示。

它最近没有(并且很快就会被发布)Spark 2.3。

不支持STREAMTABLE提示,但鉴于最近的更改(在SPARK-20857 Generic resolved hint node中)构建一个应该相当容易编写的提示框架。

你必须编写一些Spark优化和可能支持STREAMTABLE的物理计划(这似乎很多工作),但这是可能的。工具就在那里。

关于连接优化,在即将发布的Spark 2.3中,有两个主要的逻辑优化:

  1. ReorderJoin
  2. CostBasedJoinReorder(仅限基于费用的优化)