스파크 API(Spark API)
스파크 API는 아파치 스파크 빅데이터 처리 엔진에서 데이터 처리와 분석을 수행하기 위한 프로그래밍 인터페이스(API)입니다. Spark를 다루다 보면 다음과 같은 세 가지 API를 접하게 됩니다. DataFrame, Dataset 그리고 RDD의 세 가지입니다.
RDD란 무엇입니까?
RDD, 즉 Resilient Distributed Datasets란 분산형 컴퓨팅을 포함한 레코드 컬렉션으로 본질적으로 내결함성이 있고 변경 불가능합니다. 저수준 API와 병력 방식으로 운영할 수 있는데, 이 경우 지연 기능 때문에 Spark 작업이 빠른 속도로 수행됩니다. RDD가 지원하는 작업 유형은 두 가지입니다.
- 변환(Transformations) - 또 다른 RDD를 반환하는 지연 실행(lazy operation)으로, 이 RDD는 여기에서 작업을 수행하지 않는 이상 연산을 수행하지 않습니다. 변환의 예로는 map(), flatmap(), filter() 등이 있습니다.
- 작업(Actions) - 계산을 트리거하고 값을 반환하는 작업입니다. 작업의 예로는 count, top(), savetofile() 등이 있습니다.
RDD의 단점
RDD를 다루기로 선택했다면, 모든 RDD를 각각 최적화해야 합니다. 또한 RDD는 Dataset나 DataFrame과는 달리 수집된 데이터의 스키마를 추론하지 않으므로 사용자가 지정해야 합니다.
DataFrame이란 무엇입니까?
DataFrame은 이름이 명명된 열 아래에 속하는 행의 분산형 컬렉션입니다. 간단히 말하면, 열 헤더를 포함한 Excel 시트와 같다고 보면 됩니다. 아니면 관계형 데이터베이스의 테이블이라든지, R이나 Python에서는 DataFrame과 동급이라고 생각하면 됩니다. 여기에는 RDD와 공통되는 세 가지 특징이 있습니다.
- 본질적으로 변경 불가능: DataFrame은 사용자가 생성할 수는 있지만 변경할 수는 없습니다. DataFrame은 변형할 수 없는 RDD라고 보면 됩니다.
- 평가가 느림: 작업(action)을 수행할 때까지 태스크를 실행하지 않습니다.
- 분산형: DataFrame은 본질적으로 분산되어 있다는 점에서 RDD와 똑같습니다.
DataFrame 만드는 법
Spark에서 DataFrame을 만들려면 몇 가지 방법이 있습니다.
- 다양한 데이터 형식을 사용합니다. 예를 들어, JSON, CSV, RDBMS, XML 또는 Parquet에서 데이터 로드
- 기존 RDD에서 데이터 로드
- 프로그램 방식으로 스키마 지정
DataFrame의 단점
DataFrame API의 주된 단점은 컴파일링 시간을 안전하게 지원하지 않는다는 점입니다. 따라서 데이터 구조를 모르는 경우 사용자에게 한계가 생깁니다.
Dataset란 무엇입니까?
Dataset는 강력한 형식(strongly-typed), 변경 불가능한 개체 컬렉션으로 이는 관계형 스키마에 매핑됩니다. Dataset는 JVM 개체를 사용하여 만들고 복잡한 기능적인 변환을 사용해 조작할 수 있습니다. Dataset를 만드는 방법은 두 가지입니다.
- 동적으로
- SparkSession을 사용해 JSON 파일에서 읽어서.
Dataset의 단점
Dataset의 주된 단점은 문자열로 타입캐스트(typecasting)해야 한다는 점입니다.