我正在使用Apache Spark执行map-reduce作业,但映射步骤会产生一个占用大量内存的结构。在将其他映射对象添加到内存之前,如何让它减少并从内存中删除地图?
我基本上是在做myrdd.map(f).reduce(r)。但是,f返回一个非常大的对象,所以我需要运行reducer然后在太多堆积之前从内存中删除映射的对象。我能以某种方式这样做吗?
答案 0 :(得分:0)
与MapReduce中的组合器类似,使用键/值对时,combineByKey()
接口可用于自定义组合器功能。默认情况下,reduceByKey()
等方法使用自己的组合器在每个分区中本地组合数据,用于给定键
与aggregate()
(与单个元素RDD一起使用)类似,combineByKey()
允许用户返回与输入RDD的元素类型相比的不同RDD元素类型。
答案 1 :(得分:0)
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)