【发布时间】:2017-04-08 00:22:21
【问题描述】:
我想知道使用 sparks mapPartitions 功能与瞬态惰性验证有什么不同。
由于每个分区基本上都在不同的节点上运行,因此将在每个节点上创建一个瞬态惰性 val 实例(假设它在一个对象中)。
例如:
class NotSerializable(v: Int) {
def foo(a: Int) = ???
}
object OnePerPartition {
@transient lazy val obj: NotSerializable = new NotSerializable(10)
}
object Test extends App{
val conf = new SparkConf().setMaster("local[2]").setAppName("test")
val sc = new SparkContext(conf)
val rdd: RDD[Int] = sc.parallelize(1 to 100000)
rdd.map(OnePerPartition.obj.foo)
// ---------- VS ----------
rdd.mapPartitions(itr => {
val obj = new NotSerializable(10)
itr.map(obj.foo)
})
}
有人可能会问你为什么想要它...
我想创建一个通用容器概念,用于在任何通用集合实现(RDD、List、scalding pipe 等)上运行我的逻辑
他们都有“地图”的概念,但mapPartition 对spark 来说是独一无二的。
【问题讨论】:
标签: dictionary apache-spark partition transient