您可以使用 SparkR 进行广播加入吗?
Posted
技术标签:
【中文标题】您可以使用 SparkR 进行广播加入吗?【英文标题】:Can you do a broadcast join with SparkR? 【发布时间】:2017-06-30 16:08:39 【问题描述】:根据post,我正在尝试将大型数据帧连接到较小的数据帧,我发现广播连接是一种有效的方法。
但是我在 SparkR documentation 中找不到广播功能。
所以我想知道您是否可以使用 SparkR 进行广播加入?
【问题讨论】:
【参考方案1】:Spark 2.3:
在此拉取请求中将创建broadcast
函数:https://github.com/apache/spark/pull/17965/files
Spark 2.2:
您可以提供自定义提示进行查询:
head(join(df, hint(avg_mpg, "broadcast"), df$cyl == avg_mpg$cyl))
参考:此代码:https://github.com/apache/spark/blob/master/R/pkg/R/DataFrame.R#L3740
Java、Scala 和 Python API 中的广播函数也是添加广播提示的包装器。提示意味着优化器获得了额外的信息:这个 DataFrame 很小,我 - 用户 - 保证这一点,你应该在加入其他 DataFrame 之前进行广播。
旁注: Spark 有时会自动执行 Broadcast Join。您可以通过设置来操作自动广播加入的配置:
spark.sql("SET spark.sql.autoBroadcastJoinThreshold = -1")
这里-1表示不会广播DataFrame来使用Broadcast Join。你可以阅读更多关于这个话题here
【讨论】:
“提示”是什么意思? hint 是函数,可从 Spark 2.2 获得以上是关于您可以使用 SparkR 进行广播加入吗?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 java 中的 Spark 2.1 中进行广播加入