본문 바로가기
개발/HADOOP_SPARK_ETC

SPARK 의 헷갈림 reduce(), fold()

by 로그인시러 2017. 2. 16.
아래와 같은 현상이 이상했다.

>>> 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

댓글