java - 加入 2 个 PairRDDs 而不洗牌

标签 java scala hadoop apache-spark

我有 2 个 PairRDD:非常大的 rddA 和小得多的 rddB。我需要按键连接它们,以便我可以进一步迭代对应于相同键的那些 PairRDD 的元素对。 PairRDD#join 方法似乎正是我所需要的,但我看到它涉及到混洗,从而导致向 HDFS 写入大量数据并经常出现内存不足错误。有没有办法避免洗牌?

最佳答案

为了减少混洗,数据必须位于相同的集群节点上。

  • 在数据源级别控制分区和/或使用 .partition 运算符
  • 如果小RDD可以装下所有worker的内存,那么使用广播变量是更快的选择

一些对我有帮助的建议:

关于java - 加入 2 个 PairRDDs 而不洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795874/

相关文章:

java - 向量化梯度下降算法

Scala - 懒惰地对有序迭代器进行分组

c - 使用 Scala 构建类 C 的解释器

Hadoop - 不同大小(200-500mb)的不可分割文件的适当 block 大小

hadoop - 获取 Hive 中 Record 的文件名

java - 不发布的服务模块在 Helios 中不起作用

java - solr 云 - java.lang.NoClassDefFoundError : org/apache/lucene/analysis/util/TokenizerFactory

java - Java wait(), notify() 的实现与锁有很大不同吗?

scala - Spark - 将嵌套列更新为字符串

scala - SBT项目java.io.FileNotFoundException:FileNotFoundException:HADOOP_HOME未设置