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 |