【问题标题】:Can you do a broadcast join with SparkR?您可以使用 SparkR 进行广播加入吗?
【发布时间】:2017-06-30 16:08:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: apache-spark 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 获得
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 2021-09-05
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多