您可以使用 SparkR 进行广播连接吗?

Can you do a broadcast join with SparkR?

我正在尝试将一个大数据帧连接到一个较小的数据帧,并且我发现广播连接是一种有效的方法,根据此 post

但是我在SparkR中找不到广播功能documentation

所以我想知道您是否可以使用 SparkR 进行广播连接?

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 也是用于添加广播提示的包装器。提示意味着优化器获得额外的信息:这个数据帧很小,我 - 用户 - 保证这一点,你应该在加入其他数据帧之前进行广播。

旁注: Spark 有时会自动执行 Broadcast Join。您可以通过设置来操纵自动广播加入的配置:

spark.sql("SET spark.sql.autoBroadcastJoinThreshold = -1")

这里-1表示不广播DataFrame使用Broadcast Join。您可以阅读有关此主题的更多信息 here