안녕하세요. 위기의코딩맨입니다.
오늘은 Spark RDD 집계와 관련된 연산들을 알아보도록 하겠습니다.
[ reduceByKey() ]
RDD의 구성이 키와 값으로 구성되어 있어야 사용가능합니다.
같은 키의 값들을 하나의 값으로 더해서 새로운 RDD를 생성하는 메서드입니다.
val rdd = sc.parallelize(List("a","b","b")).map((_,1))
val result = rdd.reduceByKey(_ +_)
print(result.collect.mkString(", "))
결과 값은 (a,1), (b,2) 이유는 rdd의 인자 중 키 b가 2개 존재하며, 1의 인자를 갖고 있어 1+1 하여 b는 2의 출력 값을 얻게됩니다.
[ foldBykey() ]
RDD의 구성이 키와 값으로 구성되어 있어야 사용가능합니다.
reduceBykey()와 같은 키의 값들을 하나의 값으로 더해서 새로운 RDD를 생성하는 것은 동일하지만
연산 초기 값을 메서드의 인자로 전달하여 병합 할때 사용할 수 있다는 점에서 차이가 있습니다.
0 = 두개의 정숫값을 더하는 함수
"" = 문자열을 만드는 함수
val rdd = sc.parallelize(List("a","b","b")).map((_,1))
val result = rdd.foldByKey(0)(_+_)
print(result.collect.mkString(", "))
결과 값은 (a,1),(b,2)가 출력 되는 것을 확인할 수있습니다. 0을 입력한 이유는 느낌으로는 a,b,b의 값들은 정수 값을 더해야 하기 때문입니다.
[ combineByKey(), aggregateByKey() ]
RDD의 구성이 키와 값으로 구성되어 있어야 사용가능합니다.
reduceByKey(), foldByKey()와 유사하지만, 같은 키를 가진 값들을 병합할때 값의 타입이 바뀔수 있다는 점에서 차이가 있습니다.
("a",1)("a",1)("a",1)를 combineByKey()로 병합하면 ("a", 임이로정의한 클래스) 로 결과가 나올 수 있습니다.
aggregateByKey()는 foldByKey()와 유사하게 combineByKey()에서 초기값을 생성하는 부분이 있다는 차이점이 있습니다.
두개의 예제는 조금 더 깊게 들어가봐야함으로 나중에 따로 알아보도록 하겠습니다.
오늘은 Spark RDD의 집계 연산 메서드들을 간단하게 알아보았습니다.
알아갈수록 점점 어려워지는 Spark...
'Spark' 카테고리의 다른 글
[We-Co] Spark RDD filter 및 정렬 연산 (0) | 2021.09.01 |
---|---|
[We-Co] Spark RDD PIPE 및 파티션 연산 (0) | 2021.08.27 |
[We-Co] Spark RDD의 집합 연산 (0) | 2021.08.26 |
[We-Co] groupBy(), groupByKey(), cogroup() - Spark (0) | 2021.08.24 |
[We-Co] RDD 생성 (0) | 2021.08.11 |