We-Co

[We-Co] Spark RDD 집계 연산 본문

Spark

[We-Co] Spark RDD 집계 연산

위기의코딩맨 2021. 8. 26. 23:43
반응형

안녕하세요. 위기의코딩맨입니다.

오늘은 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...

반응형