加入 2 个 PairRDDs 而不洗牌

Join 2 PairRDDs without shuffling

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

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

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

一些对我有帮助的建议: