안녕하세요. 위기의코딩맨입니다.
오늘은 RDD의 출력 연산에 관해 알아보도록 하겠습니다.
관련 연산들이 많이 존재하여 첫번째와 두번째 나눠서 진행하도록 하겠습니다.
[ first ]
first는 말 그대로 RDD의 첫번째 인자를 가져오는 역할을 합니다.
스파크 셸 작업에서 트랜스포메이션의 수행 결과 등을 빠르게 확인하는 역할로 활용할 수 있습니다.
scala> val rdd = sc.parallelize(List(3, 5, 1))
scala> val result = rdd.first
result: Int = 3
scala> print(result)
결과를 확인해보면 3이 출력되는 것을 확인할 수 있습니다.
[ take() ]
take()는 RDD의 첫번째 요소로부터 n개 까지의 요소를 반환하는 메서드입니다.
scala> val rdd = sc.parallelize(1 to 20, 5)
scala> val result = rdd.take(5)
result: Array[Int] = Array(1, 2, 3, 4, 5)
scala> print(result.mkString(", "))
결과는 1, 2, 3, 4, 5가 출력됩니다. result의 타입을 보면 리스트와 같은 배열 형태로 반환받기 때문에 지나키게 큰 n 값을 지정하면 메모리 부족 오류가 발생할 수 있습니다.
[ takeSample() ]
RDD 요소 가운데 지정된 크기의 샘플을 추출하는 메서드입니다.
sample()과 유사하지만, 샘플의 크기를 지정하는 점과 반환받는 타입이 RDD가 아닌 배열이나 리스트 형태라는 차이가 있습니다.
scala> val rdd = sc.parallelize(1 to 100)
scala> val result = rdd.takeSample(false, 20)
result: Array[Int] = Array(47, 76, 17, 84, 48, 53, 72, 37, 77, 96, 24, 32, 22, 21, 83, 14, 56, 85, 2, 91)
scala> print(result.length)
결과는 20의 크기만큼 rdd에서 메서드 요소를 가져온 걸 확인할 수 있습니다.
[ collect(), count() ]
앞에서 사용되었던 collect()와 count()는 간단하게 설명만 드리겠습니다.
collect()는 RDD의 요소들을 리스트, 배열같이 결과를 반환해주는 메서드입니다.
count()는 RDD에 모든 요소의 개수를 반환해주는 메서드입니다.
[ countByValue() ]
RDD에 요소들 하나하나의 개수를 반환해주는 역할을 하는 메서드입니다.
앞에서 배웠던 집계연산의 reduceByKey()의 차이점은 하나의 키 - 값 형태로 만든 후, 사용을 진행했다면
countByValue()는 키 - 값 형태가 아니여도 바로 사용가능합니다.
scala> val rdd = sc.parallelize(List(1,2,1,3,3))
scala> val result = rdd.countByValue
result: scala.collection.Map[Int,Long] = Map(1 -> 2, 2 -> 1, 3 -> 2)
scala> print(result)
Map(1 -> 2, 2 -> 1, 3 -> 2)의 값이 출력된느 것을 확인 할 수 있습니다.
[ reduce() ]
RDD에 포함되어있는 요소의 값 두개를 하나로 더하고 계속적으로 반복하여 결과 값을 반환하는 메서드입니다.
쉽게 설명드리면 (1,2,3,4,5)가 존재하면 ((((1+2)+3)+4)+5) 이런 형태로 진행되는 방식입니다.
scala> val rdd = sc.parallelize(1 to 10,3)
scala> print(rdd.collect.mkString(","))
1,2,3,4,5,6,7,8,9,10
scala> val result = rdd.reduce(_+_)
result: Int = 55
scala> print(result)
RDD에 1~10까지의 숫자를 넣고 reduce(_+_)로 하나씩 값을 넣어주어 결과 값 55를 반환 받는것을 확인 할 수 있습니다.
[ fold() ]
reduce()와 비슷하지만 초깃 값을 설정할 수 있다는 차이가 있습니다.
scala> val rdd = sc.parallelize(1 to 10,3)
scala> print(rdd.collect.mkString(","))
1,2,3,4,5,6,7,8,9,10
scala> val result = rdd.fold(1).(_+_)
result: Int = 56
scala> print(result)
결과 값이 56이 출력되는데 fold(1)로 초깃 값을 1로 주어 ((1+1)+2) 이런형식으로 처음에 1을 먼저 더해주고
시작한다고 생각하시면 이해하기 쉬울 것 같습니다.
오늘은 RDD의 출력연산에 대해 간단하게 알아봤습니다.
아직 출력 관련 연산들이 많이 남아있어 RDD 출력 연산 (2)로 찾아뵙겠습니다.
'Spark' 카테고리의 다른 글
[We-Co] Spark Accumulator (0) | 2021.09.03 |
---|---|
[We-Co] Spark RDD 출력 연산 (2) (0) | 2021.09.02 |
[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 |