您可以使用 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 中进行广播加入

同时使用 SparkR 和 Sparklyr

在线广播。版权问题

广播接收器类可以进行休息客户端调用吗?

您可以从位于单个结果集中的两个单独的表中提取数据吗? [不加入问题]

如何在加入(广播)和使用 Spark 收集之间进行选择