我有 2 个 PairRDD:非常大的 rddA 和小得多的 rddB。我需要按键连接它们,以便我可以进一步迭代对应于相同键的那些 PairRDD 的元素对。 PairRDD#join 方法似乎正是我所需要的,但我看到它涉及到混洗,从而导致向 HDFS 写入大量数据并经常出现内存不足错误。有没有办法避免洗牌?
最佳答案
为了减少混洗,数据必须位于相同的集群节点上。
- 在数据源级别控制分区和/或使用 .partition 运算符
- 如果小RDD可以装下所有worker的内存,那么使用广播变量是更快的选择
一些对我有帮助的建议:
- Advanced Spark Training特别是幻灯片 12 附近
- 关于加入广播 map :Advanced Spark Features特别是幻灯片 9-12
关于java - 加入 2 个 PairRDDs 而不洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795874/