Apache spark 如何让ApacheSpark在完成映射之前减少内存使用?

Apache spark 如何让ApacheSpark在完成映射之前减少内存使用?,apache-spark,Apache Spark,我正在用ApacheSpark做一个MapReduce工作,但是映射步骤会产生一个结构,它会占用大量内存。在将其他贴图对象添加到内存之前,如何使其从内存中减少和删除贴图 我基本上是在做myrdd.map(f)、reduce(r)。但是,f返回一个非常大的对象,所以我需要运行reducer,然后在太多对象堆积之前从内存中删除映射对象。我可以这样做吗?与MapReduce中的combiner类似,在使用键/值对时,combineByKey()接口可用于自定义combiner功能。默认情况下,像red

我正在用ApacheSpark做一个MapReduce工作,但是映射步骤会产生一个结构,它会占用大量内存。在将其他贴图对象添加到内存之前,如何使其从内存中减少和删除贴图


我基本上是在做myrdd.map(f)、reduce(r)。但是,f返回一个非常大的对象,所以我需要运行reducer,然后在太多对象堆积之前从内存中删除映射对象。我可以这样做吗?

与MapReduce中的combiner类似,在使用键/值对时,
combineByKey()
接口可用于自定义combiner功能。默认情况下,像
reduceByKey()
这样的方法使用它们自己的组合器来为给定的键在每个分区中本地组合数据


aggregate()
(与单元素RDD一起使用)类似,
combineByKey()
允许用户返回与输入RDD的元素类型不同的RDD元素类型。

这听起来有点像XY问题,但它确实可以从一些说明问题的代码和语言标记中获益。
trait SmallThing

trait BigThing

val mapFunction: SmallThing => BigThing = ???
val reduceFunction: (BigThing, BigThing) => BigThing = ???

val rdd: RDD[SmallThing] = ???

//initial implementation:
val result1: BigThing = rdd.map(mapFunction).reduce(reduceFunction)

//equivalent implementation:
val emptyBigThing: BigThing = ???
val result2: BigThing = rdd.aggregate(emptyBigThing)(seqOp = (agg, small) => reduceFunction(agg, mapFunction(small)), combOp = reduceFunction)