반응형

1. 서론

이번 포스팅에서는 스파크 데이터 모델 중 하나인 RDD에 대해 진행하겠습니다.

 

2. RDD 액션

RDD는 스파크에서 제공하는 데이터 모델입니다.

이 모델은 다양한 데이터처리를 위한 함수를 제공합니다.

 

함수는 크게 트랜스포메이션 연산과 액션 연산으로 나눌 수 있고,

각 연산에 대해 소개하도록 하겠습니다.

 

1) 트랜스포메이션 연산

 

1. map = RDD에 있는 데이터에 지정 연산을 수행한 후 RDD를 반환

2. flatMap = map연산과 비슷하지만 반환 타입이 iterate인 RDD 반환

3. mapPartitions = map연산을 파티션 단위로 연산

4. mapPartiitonsWithIndex = mapPartitions에서 각 파티션의 index정보도 같이 넘기는 연산

5. mapValues = (key, value) 형태의 RDD에만 적용가능하며 value에만 map 연산을 수행 후 RDD를 반환하는 연산

6. flatMapValues = RDD가 (key, value) 형태일 때 위의 flatMap 연산을 value에 적용하고자 할때 사용하는 연산

7. zip = 2개의 RDD를 (key, value)로 묶어주는 연산. RDD의 데이터 크기가 같아야 합니다..

8. zipPartitions = 파티션 단위로 zip연산을 수행하는 연산.

  • zipPartitions연산은 zip 연산과 다르게 최대 4개까지 지정 가능
  • 파이썬에서는 사용 불가.
  • 파티션의 갯수가 같아야 합니다.

9. groupby = RDD의 데이터를 지정한 group 집합으로 묶어 RDD를 반환하는 연산

10. groupbyKey = (key, value) 형태의 RDD를 키 기준으로 group 하여 반환하는 연산

  • (key, sequence[value])로 구성.

11. cogroup = (key, value) 형태의 여러 RDD를 key 기준으로 group 한 후 각 RDD의 sequence[value]를 Tuple로 반환하는 연산

 

ex) = (키, Tuple(RDD1의 sequence[value], RDD2의 sequence[value]))
최대 3개까지 RDD를 group 할 수 있습니다.

 

12. distinct = RDD에서 중복을 제거한 뒤 RDD를 반환하는 연산

13. certesian = 2개 RDD의 카테시안 곱을 한 RDD를 반환하는 연산(M x N)

14. subtract = 2개 RDD에서 1개의 RDD값을 제외한 값들을 반환하는 연산(M - N)

15. union = 2개 RDD의 합집합한 결과를 반환하는 연산(M + N)

16. intersection = 2개의 RDD의 교집합을 반환하는 연산 (M ∩ N)

17. join = 2개의 (key, value) 형태의 RDD를 키 기반으로 join하여 RDD를 반환하는 연산

  • ex ) (키, Tuple(첫번째 RDD의 요소, 두번째 RDD의 요소))
  • join은 inner join입니다. 한마디로 join이 되지 않으면 반환 RDD에 포함 X

18. leftOuterJoin, rightOuterJoin = sql의 left(right)OuterJoin과 비슷한 연산

  • 조인결과가 없을 수도 있어, 주최 RDD가 아니라면 Optional 값으로 반환.
  • ex) (a, (1, None)), (b, (1, Some(2))), (c, (1, Some(2)))

19. subtractByKey = 2개의 (key, value) 형태의 RDD에서 같은 key를 제외하고 RDD를 반환하는 연산.

20. reduceByKey = 2개의 RDD에서 같은 key로 병합하여 RDD를 반환하는 연산.

21. foldByKey = reduceByKey 연산에서 초기값을 부여하는 옵션이 추가된 연산.

22. combineByKey = 반환 RDD의 값 타입이 변경될수 있는 연산

  •  첫번째 인자(초기값을 위한 함수)
  •  두번째 인자(RDD의 각 파티션에서 수행할 함수)
  •  세번째 인자(각 파티션들을 결합하는 함수)

23. aggregateByKey = combineByKey연산의 첫번째 인자가 함수가 아닌 값으로만 변경된 연산.

24. pipe = map연산에서 외부 프로세스를 사용하는 연산.

  • ex) rdd.pipe("cut -f 1,3 -d ,") -> cut 유틸 사용.

25. repartitionAndSortWithinPartitions = 파티션 갯수 조절 후 각 파티션에서 정렬한 뒤 RDD를 반환하는 연산.

26. partitionBy = RDD의 값들을 특정 파티션으로 옮기고 싶을때 사용하는 연산

  • 셔플링이 발생하는 연산으로 성능에 크게 영향이 가므로 잘 판단하여 사용해야 합니다.

27. sortByKey = 키 값을 기준으로 정렬한 후 RDD 를 반환하는 연산.

28. keys, values = 자바 map의 keys, values와 같은 의미의 연산

 

 

 

 

 

반응형

 

 

 

 

 

2) 액션연산

 

1. collect = RDD 데이터를 배열로 반환하는 연산

2. count = RDD 데이터의 갯수를 반환하는 연산

3. first = RDD의 첫번째 요소를 반환하는 연산

4. take = RDD의 첫번째 요소부터 n개를 반환하는 연산

5. countByValue = 값을 각 카운팅하여 map으로 반환하는 연산

  • [1, 1, 2, 3, 3] => Map({1:2, 2:1, 3:2})

6. reduce = 2개의 RDD요소를 하나로 합치는 연산

  • 입력과 출력의 타입이 같아야 합니다.

7. fold = reduct 연산에서 초기값을 지정할 수 있는 연산

  • 입력과 출력의 타입이 같아야 합니다.

8. aggregate = reduce와 fold를 합친 연산

  • 첫번째 인자(초기값)
  • 두번째 인자(RDD의 각 파티션에서 수행할 병합함수)
  • 세번째 인자(각 파티션들을 결합하는 함수)
  • 입력과 출력의 타입이 달라도 됩니다.

9. sum = RDD의 요소의 합을 반환하는 연산

  • int, double, long 등 숫자 타입의 RDD에서만 가능합니다.

10. forEach, forEachPartition = map, mapPartition과 기능은 동일하나 반환값이 없는 점이 다른 연산

  • 이 연산은 각 개별 노드에서 수행됩니다.

11. toDebugString = RDD의 세부 정보를 파악하기 위한 연산

 

3. 기타 액션 

1. coalesce, repartition = 두 연산 모두 RDD의 파티션 크기를 조정하는 연산

  • coalesce = 파티션 갯수를 줄이기만 가능합니다.
  • repartition = 파티션 갯수를 늘리고 줄이기 모두 가능합니다.
  • repartition은 무조건 셔플이 발생되며, coalesce은 지정했을때만 셔플이 발생합니다.
  • 셔플 연산은 비용이 큰 연산이니 고려하여 사용해야 합니다.

2. cache, persist, unpersist =

  • cache, persist는 첫 액션연산 후 RDD 정보를 메모리 또는 디스크에 저장하는 메소드입니다.
  • unpersist는 필요없는 데이터를 캐시에서 제거할때 사용합니다.
  • cache, persist는 정보를 메모리에 올리게 되면 빠른 연산을 할 수 있게 도와줍니다.
    • 단, 너무 많이 올리게 되면 GC대상이 되어 악영향을 줄 수도 있으니 이 메서드도 함부로 남발해서는 안됩니다.

4. 마무리

이번에는 스파크 데이터 모델 중 하나인 RDD 대해서 포스팅하였습니다.

다음에는 스파크 설정에 대해 포스팅하겠습니다.

기존 책에서는 3장이 클러스터 구축이나, Hadoop 카테고리에서 Hadoop 설치 를 따라하시면 구축 및 스파크도 설치되어 있습니다. 

 

반응형

'BigData > Spark' 카테고리의 다른 글

(6) 스트럭처 스트리밍  (0) 2020.03.31
(5) 스파크 스트리밍  (0) 2020.03.19
(4) 스파크 SQL  (0) 2020.03.17
(3) 스파크 설정  (0) 2020.03.13
(1) 스파크 소개  (0) 2020.03.11

+ Recent posts