Apache spark sql 我怎样才能播放诱惑而不是“诱惑”呢;“排序合并联接”;当我使用sparkSQL时?

Apache spark sql 我怎样才能播放诱惑而不是“诱惑”呢;“排序合并联接”;当我使用sparkSQL时?,apache-spark-sql,broadcast,Apache Spark Sql,Broadcast,我将自动广播设置为200M,表a为20KB,表b为20KB,表c为100G。 我发现“a left join b on…”是“broadcast join”并将结果注册为“Tentable”(Tentable为30KB),我的问题是当我执行“c left join Tentable on…”时,我希望autobroadcast the Tentable可以进行广播连接,但它进行了排序合并连接。我还尝试缓存Tentable的Tentable和broadcast数据帧,但它不起作用。。。 我怎样才能

我将自动广播设置为200M,表a为20KB,表b为20KB,表c为100G。 我发现“a left join b on…”是“broadcast join”并将结果注册为“Tentable”(Tentable为30KB),我的问题是当我执行“c left join Tentable on…”时,我希望autobroadcast the Tentable可以进行广播连接,但它进行了排序合并连接。我还尝试缓存Tentable的Tentable和broadcast数据帧,但它不起作用。。。 我怎样才能通过sparkSQL发布一个广播连接? 我用的是spark-1.6.1
谢谢

但是如果没有任何代码片段,就很难理解您到目前为止尝试了什么。我正在分享一些在Spark 2.3中尝试过的示例代码,其中在Temp View上应用了广播功能(因为Spark2中不推荐使用Temp table)。在下面的scala代码中,我强制使用广播哈希连接

import org.apache.spark.sql.functions.broadcast
val adf = spark.range(99999999)
val bdf = spark.range(99999999)
adf.createOrReplaceTempView("a")
bdf.createOrReplaceTempView("b")
val bdJoinDF = spark.sql("select /*+ BROADCASTJOIN(b) */a.id, b.id from a join b on a.id = b.id")
val normalJoinDF = spark.sql("select a.id, b.id from a join b on a.id = b.id")
println(normalJoinDF.queryExecution) //== Physical Plan == *(5) SortMergeJoin [id#39512L], [id#39514L], Inner
println(bdJoinDF.queryExecution) //== Physical Plan == *(2) BroadcastHashJoin [id#39611L], [id#39613L], Inner, BuildRight, false

欢迎来到SO!请阅读,以便您能收到适当的解决方案。请检查@abhijitnag我想广播诱惑,而不是注册或缓存它…@Figo让我知道,上述方法是否对您有帮助我只能使用spark1.6