본문 바로가기
학습장/Data Engineering

[spark] RDD란?

by daedoo_ 2022. 10. 24.

RDD (Resilient Distributed Dataset)

스파크의 데이터 처리 모델

RDD는 대량의 데이터를 요소로 가지는 분산 컬렉션

  • 클러스터 환경에서 분산처리를 전제로 설계 되었음
  • 내부는 파티션이라는 단위로 나뉨
  • 스파크에서는 '파티션'이 분산처리 단위

RDD가 데이터를 처리하는 방식

  • 변환 (Transformation) ( ex. Filter, groupBy, map, ..)
    • RDD를 가공하여 새로운 RDD를 얻는 처리
      • 데이터가 이미 키값으로 파티셔닝 되어 있거나,, 하나의 노드 내에서 모두 처리할 수 있는 작업 .. 데이터 양이 적은 경우?,
      1. 변환 전의 RDD가 가지는 요소를 같은 RDD의 다른 요소와 함께 처리하는 변환
      • 키와 밸류의 쌍을 요소로 갖는 RDD
      • 같은 키를 갖는 요소를 한데 모아 처리함
        • 같은 키를 갖는 요소가 전부 같은 파티션에 있어야 함. (스파크는 파티션 단위로 독립해 분산처리 하므로)
        • 이때, 서로 다른 파티션에 있는 같은 키를 갖는 요소의 자리를 바꾸는 것을 셔플 이라고 한다.
        • 셔플은 변환전의 RDD 요소를 변환 후에 키를 기준으로 각 파티션에 배분
        • ex) reduceByKey, join
    • 1 ) 변환 전의 RDD가 가지는 요소를 같은 RDD의 다른 요소들과 관계없이 처리할 수 있는 방식 (셔플이 일어나지 않는 ?? )

 

 

 

 

  • 액션 (action)
    • RDD 내용을 바탕으로 가공하지 않고 원하는 결과를 얻는 처리
      • 값을 드라이버 프로그램에 되돌려 주거나, 외부 스토리지에 저장
    • 사용하는 함수가 '변환'인지 '액션'인지 헷갈린다면,
      • 변환은 RDD를 되돌려 주지만, 액션은 그 외의 다른 데이터 타입을 반환한다.
    • 액션이 일어나는 시점에 변환이 실제적으로 실행 되는 건가 ?? - lazy evaluation

RDD, Dataframe 차이

https://loustler.io/data_eng/spark-rdd-dataframe-and-dataset/

RDD의 한계

  • 내장된 최적화 엔진이 없다
  • 정형 데이터를 정의하고 처리할 수가 없다??

DataFrame의 특징

  • 스키마를 갖고 있다, 구조화 된
  • SparkSQL을 사용할 수 있다
  • Named column을 갖고 있다
  • Catalyst Optimizer? 를 통해 최적화 가능하다

RDD는 DataFrame API보다 저수준의 API입니다. DataFrame을 사용하면 RDD로 컴파일되고 최적화되어 효율적으로 돌아가기 때문에 위와 같이 특별한 이유가 없다면 DataFrame을 사용하는 것이 좋습니다. 물론 스파크가 어떻게 돌아가는지 깊게 알아보고자 한다면 꼭 알아둬야겠습니다.

- 참고 : https://moons08.github.io/programming/dataETL/

 

Data ETL with Spark (Spark로 데이터 처리하기)

모든 데이터 작업의 시작이자 끝인 ETL! 스파크를 이용하여 파일을 읽고, 변형하여 저장하는 방법에 대해 소개합니다.데이터는 Kaggle의 Suicide Rates Overview 1985 to 2016를 사용했습니다.

moons08.github.io

 

 

'학습장 > Data Engineering' 카테고리의 다른 글

[DB] index 등 기본개념 정리  (3) 2022.11.08
spark 실행구조  (0) 2022.10.31
pandas - stack()  (2) 2022.10.03
Vertica 특징  (4) 2022.09.29
python sqllineage 라이브러리  (6) 2022.08.29

댓글