아래와 같은 현상이 이상했다.
>>> reduce(lambda x, y: (x*2) + y, [1,2,3,4])
26
>>> sc.parallelize([1,2,3,4]).reduce(lambda x, y: (x*2) + y)
18
>>> sc.parallelize([1,2,3,4],1).reduce(lambda x, y: (x*2) + y)
26
>>> sc.parallelize([1,2,3,4],2).reduce(lambda x, y: (x*2) + y)
18
>>> sc.parallelize([1,2,3,4],3).reduce(lambda x, y: (x*2) + y)
18
>>> sc.parallelize([1,2,3,4],4).reduce(lambda x, y: (x*2) + y)
26
뭐지? partition 을 나누는 갯수에 따라 값이 다르다. ;;
spark 입문자로써 이거슨 혹시 spark 의 버그일까? 라는 의심도 해봄 ㅋㅋㅋ
그러나, 위의 결과는 [1,2,3,4] 리스트를 순차적으로 처리하는 python 의 reduce 와
[1,2,3,4] 를 각 파티션에서 연산 후 combine 하는 spark 의 차이 때문에 발생한다.
결론은, spark 를 생각할 때는 늘 분산된 파티션들의 연산과 그것을 combine 하는 부분을 나눠서 생각해야 한다는 것이다.
굳이, 원하는 의도의 값을 얻고자 한다면, map()-reduce() 를 통해서 처리해야한다.
map() 이라는 transformation 과 reduce() 라는 action 을 활용.
'개발 > HADOOP_SPARK_ETC' 카테고리의 다른 글
하둡 기초 -1 (0) | 2017.02.22 |
---|---|
spark codeing 시 유의사항 (0) | 2017.02.22 |
SPARK reduce() 개념도 (0) | 2017.02.16 |
SPARK aggregate() 함수 설명 및 진행 과정 (1) | 2017.02.16 |
RDD 기본 함수 예제 (0) | 2017.02.15 |
댓글