Spark(大数据集)groupBy,排序,然后映射



使用Spark rdd有一种方法来groupByKey,然后在每个组中排序,然后映射大型数据集。简单的方法是映射每个组,为每个组创建一个列表并对其进行排序。但是,对于具有许多条目的组,创建列表可能会导致内存不足问题。有没有办法让Spark做排序,以避免内存不足的问题?

听起来您正在获得数据倾斜错误。当执行器因为与该键关联的数据太多而耗尽内存时,就会发生这种情况。该问题的解决方案是调整/播放执行器的数量和分配给每个执行器的RAM数量…

然而,我相信这将是解决你的问题的办法:

JavaPairRDD<Key, Iterable<Value>> pair = ...;
JavaRDD<Iterable<Value>> values = pair.map(t2 -> t2._2());
JavaRDD<Value> onlyValues = values.flatMap(it -> it);

source:将可迭代对象转换为RDD

请跟进这个可能的解决方案。我真的很好奇。

最新更新