나는 불꽃을 사용하는 것의 차이점이 무엇인지 궁금 해서요 mapPartitions
대 일시적인 게으른 val.
각 파티션은 기본적으로 다른 노드에서 실행되기 때문에 각 노드 (객체에있는 것으로 가정)에 일시적인 지연 val의 단일 인스턴스가 만들어집니다. 당신도 그것을 원하는 이유스파크 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
에 고유합니다.