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