在完成映射以减少内存使用量之前,如何让Apache Spark降低?

时间:2018-04-27 02:33:06

标签: apache-spark

我正在使用Apache Spark执行map-reduce作业,但映射步骤会产生一个占用大量内存的结构。在将其他映射对象添加到内存之前,如何让它减少并从内存中删除地图?

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

2 个答案:

答案 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)