나는 다음과 같은 코드를 가지고 :스파크 RDD : 여러 reducebykey 또는 한 번만
// make a rd according to an id
def makeRDD(id:Int, data:RDD[(VertexId, Double)]):RDD[(Long, Double)] = { ... }
val data:RDD[(VertexId, Double)] = ... // loading from hdfs
val idList = (1 to 100)
val rst1 = idList.map(id => makeRDD(id, data)).reduce(_ union _).reduceByKey(_+_)
val rst2 = idList.map(id => makeRDD(id, data)).reduce((l,r) => (l union r).reduceByKey(_+_))
RST1 및 RST2 샘플 결과를 얻을. 나는 rst1이 더 많은 메모리 (100 번)를 필요로하지만 단지 하나의 reduceByKey tranform을 필요로한다고 생각했다. 그러나 rst2는 메모리가 적지 만 reduceByKey 변환 (99 번)이 더 필요합니다. 그렇다면 시간과 공간의 트레이드 오프 게임입니까?
제 질문은 : 위의 분석 결과가 맞는지 또는 Spark이 내부적으로 같은 방식으로 동작을 처리하는지 여부입니다.
P.S .: rst1 union all sub rdd then reduceByKey, reducedByKey는 외부입니다. rst2 reduceByKey 하나씩, reduceByKey는 안에 있으며은 감소합니다.
나는 귀하의 질문을 이해하고 있는지 잘 모르겠습니다. rst1과 rst2는 동일한 코드를 갖지만 하나는 줄이기 위해 자리 표시자를 사용하고 다른 하나는 줄이지 않습니다. – eliasah
rst1 union all sub rdd 그런 다음 reduceByKey가 ** outside ** reduce 인 reduceByKey입니다. rst2 reduceByKey 하나씩, reduceByKey는 ** 내부 ** 감소입니다. – bourneli
오, 죄송 합니다만, rst2의 reduceByKey도 외부에 있다고 생각했습니다. – eliasah