[Spark] 4. Spark SQL (작성 중)
1. Spark SQL
- 데이터에 대한 메타 데이터인 스키마를 표현할 방법이 없다는 단점을 보안하기 위해 또 다른 유형의 데이터 모델과 API를 제공하는 스파크 모듈
- 데이터베이스에서 사용하던 SQL 구문을 스파크에서도 사용가능하도록 해주는 모듈
- Spark 2.0 기준으로 데이터셋이 메인 API로 되었다.
(단, 2.1.0 버전은 파이썬과 R에 대해서 데이터셋 API를 지원하지 않으므로 2개 언어에 대해서는 기존의 데이터프레임을 사용해야 함)
1) 데이터셋
- RDD와 동일하게 분산 오브젝트 컬렉션에 대한 프로그래밍 모델
- Transformation, Action 연산 모두 지원
-
SQL 방식과 유사한 연산을 제공함
- 장점: 풍부한 API와 옵티마이저를 기반으로 한 높은 성능으로 복잡한 데이터 처리가 가능하다.
- 단점: 처리하는 작업의 특성에 따라 RDD를 사용해야되며, 컴파일 타임 오류 체크 기능을 사용할 수 없다.
2) 데이터프레임
- org.apache.spark.sql.Row 타입의 요소로 구성된 데이터셋을 가리키며, 데이터프레임을 통해 제공되는 연산들은 타입 정보를 사용하지 않는, Untyped Operation 에 속한다.
3) 연산의 종류 및 주요 API
-
RDD와 동일하게 Transformation 연산과 Action 연산으로 분류할 수 있다.
- Transformation 연산
- 새로운 데이터셋을 생성하는 연산
- 액션 연산이 호출될 때까지 수행되지 않는다.
- 처리 방식에 따라 타입 연산(Typed Operation) 과 비타입 연산(Untyped Operation)으로 분류된다.
- Action 연산
- 실제 데이터 처리를 수행하고 결과를 생성하는 연산
- 주요 API
-
SparkSession
데이터프레임을 이용하기 위해 선언해야되는 부분이며, 인스턴스 생성을 위해 build() 메소드를 제공한다.
스파크 쉘을 사용하는 경우에는 별도의 선언을 해주지 않아도 된다. -
DataSet
SparkSQL에서 사용하는 분산 데이터 모델이다. -
DataFrameReader
SparkSession의 read() 메소드를 통해 접근할 수 있으며 데이터소스로 부터 데이터프레임을 생성하는 메소드를 제공한다. -
DataFrameWriter
Dataset의 write() 메소드를 통해 접근할 수 있으며, 데이터셋에 저장된 데이터를 파일시스템, 데이터베이스 등 다양한 저장소에 저장할 때 사용할 수 있는 메소드를 제공한다.
-
4) SparkSession
- 데이터프레임 또는 데이터셋을 생성하거나 사용자 정의 함수를 등록하기 위한 목적으로 사용된다.
댓글남기기