Apache spark 重新分区时引发内存溢出

Apache spark 重新分区时引发内存溢出,apache-spark,Apache Spark,我在Spark中遇到一个OutOfMemory异常,它是在执行重新分区时抛出的。程序正在处理以下步骤: JavaRDD<A> data = sc.objectFile(this.inSource); JavaPairRDD<String, A> dataWithKey = data.mapToPair(d -> new Tuple2<>(d.getUjid(), d)); JavaPairRDD<ADesc, AStats> dataInfo

我在Spark中遇到一个OutOfMemory异常,它是在执行重新分区时抛出的。程序正在处理以下步骤:

JavaRDD<A> data = sc.objectFile(this.inSource);
JavaPairRDD<String, A> dataWithKey = data.mapToPair(d -> new Tuple2<>(d.getUjid(), d));
JavaPairRDD<ADesc, AStats> dataInformation = dataWithKey.groupByKey()
            .flatMapToPair(v -> getDataInformation(v._2()));
dataInformation.groupByKey().repartition(PARTITIONS).map(v -> merge(v._1(), v._2()));

JavaRDD

我解决了我的问题,并给出了一个简短的概述。也许将来有人会发现这很有用

问题出在 dataInformation.groupByKey().repartition(PARTITIONS).map(v->merge(v.\u 1(),v.\u 2())

我有许多具有相同键的对象,它们应该被合并,因此许多对象位于同一分区上,任务就停止了。我更改了代码,使用了reducedByKey,并修改了merge函数,它不会合并具有相同键的所有对象,而是合并具有相同键的两个对象。因为函数是关联的,所以结果是相同的


简而言之:groupByKey将多个对象分组到一个任务中

任何人都知道如何处理问题或如何测试代码以获得更多相关信息。这个问题被降级了,没有对遗漏的内容发表评论。
Iterable<Tuple2<ADesc, AStats>> getDataInformation(Iterable<A> aIterator)