Spark SQL是否包含连接的表流优化,如果是,它如何决定要流哪个表?
在进行连接时,Hive假设最后一个表是最大的表。作为连接优化,它将尝试缓冲较小的连接表并流式传输最后一个连接表。如果连接列表中的最后一个表不是最大的表,则Hive具有/*+ STREAMTABLE(tbl) */
提示,告知它应该流式传输的表。从v1.4.1开始,Spark SQL不支持STREAMTABLE提示。
此问题已被要求在Spark SQL here之外进行正常的RDD处理。答案不适用于开发人员无法控制显式缓存操作的Spark SQL。
答案 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中,有两个主要的逻辑优化: