我正在尝试将大型数据框连接到较小的数据框,并且我看到广播连接是一种有效的方法,根据这个post。
但是我在SparkR documentation中找不到广播功能。
所以我想知道你是否可以使用SparkR进行广播加入?
答案 0 :(得分:3)
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有时会自动执行广播加入。您可以通过设置:
来操纵自动广播联接的配置spark.sql("SET spark.sql.autoBroadcastJoinThreshold = -1")
这里,-1表示不会广播任何DataFrame来使用Broadcast Join。您可以更多地了解此主题here