scala - 当使用相同的键集创建两个不同的 Spark Pair RDD 时,Spark 是否会将具有相同键的分区分配到同一台机器上?

标签 scala join apache-spark rdd

我想在两个非常大的键值对 RDD 之间进行连接操作。这两个RDD的key来自同一个集合。为了减少数据混洗,我希望我可以添加一个预分发阶段,以便具有相同键的分区将分布在同一台机器上。希望这可以减少一些洗牌时间。

我想知道 spark 是否足够聪明来为我做这件事,还是我必须自己实现这个逻辑?

我知道当我加入两个 RDD 时,一个是用 partitionBy 预处理的. Spark 足够聪明,可以使用这些信息并且只对另一个 RDD 进行洗牌。但是我不知道如果我同时在两个 RDD 上使用 partitionBy 然后进行 join 会发生什么。

最佳答案

如果您对两个 RDD 使用相同的分区器,您就可以实现数据集的共同分区。这并不一定意味着您的 RDD 位于同一位置——也就是说,分区数据位于同一节点上。

尽管如此,性能应该会更好,就好像两个 RDD 都有不同的分区器一样。

关于scala - 当使用相同的键集创建两个不同的 Spark Pair RDD 时,Spark 是否会将具有相同键的分区分配到同一台机器上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34368202/

相关文章:

scala - 重载方法值 <> 具有替代方案 w/Play 2.1.1 和 PlaySlick

scala - 捕获 Oozie 中 Spark 操作节点的控制台输出作为整个 Oozie 工作流的变量

scala - Scaja.js 浏览器支持

mysql - 如何将多个表连接在一起

scala - 如何避免重新编译生成的源代码

mysql - 在 MySQL 中将 SUM 与联接一起使用会返回意外结果

sql - 对表 "mdl_user"的 FROM 子句条目的引用无效

r - 如何将函数应用于 SparkR 中的每一行?

scala - org.apache.spark.sql.AnalysisException : Can't extract value from probability

apache-spark - 如何计算DataFrame中的移动中位数?