We-Co

[We-Co] Spark RDD 출력 연산 (1) 본문

Spark

[We-Co] Spark RDD 출력 연산 (1)

위기의코딩맨 2021. 9. 2. 11:24
반응형

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

오늘은 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)로 찾아뵙겠습니다.

 

RDD 출력연산 (2)

 

[We-Co] Spark RDD 출력 연산 (2)

안녕하세요. 위기의코딩맨입니다. 오늘은 RDD 출력연산 2번째 시간입니다!! Spark RDD 출력연산(1) [We-Co] Spark RDD 출력 연산 (1) 안녕하세요. 위기의코딩맨입니다. 오늘은 RDD의 출력 연산에 관해 알아

we-co.tistory.com

반응형

'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