Data Engineering/Apache Spark
[Spark] 스파크 완벽 가이드 04 - Ch 04. 구조적 API 개요
minjiwoo
2023. 11. 7. 23:27
728x90
구조적 API 의 종류
- Dataset
- DataFrame
- SQL Table 과 View
DataFrame 과 Dataset 의 특징
- 공통점 : row 와 column 을 가지는 분산 테이블 형태의 컬렉션
- Dataset은 결과를 생성하기 위해 어떤 데이터에 어떤 연산을 적용해야 하는지 정의하는 지연 연산의 실행 계획이며 불변성을 가진다. 스키마에 명시된 데이터 타입의 일치 여부를 컴파일 타임에 확인한다.
- Dataset 은 JVM 기반 언어인 scala 와 java에서만 지원하며, Dataset의 데이터 타입을 정의하려면 scala case class 나 JavaBean 을 사용해야 한다.
- DataFrame은 액션을 호출하면 스파크가 트랜스포매이션을 실제로 실행하고 반환함. 스키마에 명시된 데이터 타입의 일치 여부를 런타임이 되어서야 확인한다.
- DataFrame 은 Row Type으로 구성된 Dataset이다.
- DataFrame 을 사용하면 스파크의 최적화된 내부 포맷을 사용할 수 있다.
- schema : DataFrame의 컬럼명과 데이터 타입을 정의함
구조적 API의 실행 과정
- DataFrame/Dataset/SQL 을 이용해 코드를 작성함.
- 정상적인 코드라면 Spark가 논리적 실행 계획으로 변환함.
- Spark 가 논리적 실행 계획을 물리적 실행 계획으로 변환하여 최적화를 확인함.
논리적 실행 계획
- 논리적 실행 계획으로 변환하는 단계에서는 추상적 트랜스포매이션만 표현한다. 이 단계에서는 드라이버, 익스큐터의 정보를 고려하지 않는다.
- 사용자의 코드를 최적화된 버전으로 변환한다.
- 스파크 분석기는 컬럼과 테이블을 검증하기 위해 카탈로그, 모든 테이블의 저장소, DataFrame의 정보를 활용한다. 검증된 컬럼과 테이블에 대한 결과는 카탈리스트 옵티마이저로 전달된다.
물리적 실행 계획
- 물리적 실행 계획은 스파크 실행 계획이라고도 한다.
- 논리적 실행 계획을 클러스터 환경에서 실행하는 방법을 정의한다.
- 다양한 물리적 실행 전략을 생성하고 비용 모델을 이용해서 비교한 후 최적의 전략을 선택한다. -> ex. 테이블의 크기나 파티션 수 등 물리적 속성을 고려하여 연산 수행에 가장 최적화된 전략을 선택한다.
- Spark는 DataFrame, Dataset, SQL로 정의된 쿼리를 RDD 트랜스포매이션으로 컴파일 한다. -> Spark 를 '컴파일러' 라고도 할 수 있다.
컴파일(Compile) : 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU 가 이해할 수 있는 저 수준 언어로 변환하는 작업
728x90