[스파크 완벽 가이드] 4. 구조적 API 개요

2024. 3. 14. 20:09·Data Engineering

구조적 API: 데이터 흐름을 정의하는 기본 추상화 개념

  • 비정형 로그 파일, 반정형 CSV 파일, 정형적인 파케이 파일까지 다양한 유형의 데이터를 처리
  • 세가지 분산 컬렉션 API 존재: Dataset, DataFrame, SQL 테이블과 뷰
  • 배치와 스트리밍 처리에서 사용 가능. 특히, 배치, 스트리밍 작업은 서로 변환할 수 있음

 

4.1 DataFrame과 Dataset

  • 스파크가 가진 두 가지 구조화된 컬렉션 개념
  • row와 column을 가지는 분산 테이블 형태의 컬렉션
    • 각 column의 row의 수는 동일함, 컬렉션의 모든 row는 같은 데이터 타입 정보를 가짐
  • 결과를 생성하기 위해 어떤 데이터에 어떤 연산을 적용해야 하는지 정의하는 지연 연산의 실행 계획
  • DataFrame과 Dataset을 구체적으로 정의하기 위해 스키마가 필요

 

4.2 스키마

스키마: 분산 컬렉션에 저장할 데이터 타입을 정의하는 방법

  • DataFrame의 컬럼명과 데이터 타입을 정의
  • 데이터 소스에서 얻거나(= schema-on-read), 직접 정의 가능
  • 여러 데이터 타입으로 구성되며, 어떤 데이터 타입이 어느 위치에 있는지 정의하는 방법 필요

 

4.3 스파크의 구조적 데이터 타입 개요

  • 스파크는 실행 계획 수립과 처리에 사용하는 자체 데이터 타입 정보를 가지고 있는 카탈리스트 엔진을 사용
  • 표현식을 카탈리스트 엔진에서 스파크의 데이터 타입으로 변환해 명령을 처리

4.3.1 DataFrame과 Dataset 비교

DataFrame Dataset
비타입형 타입형
스키마에 명시된 데이터 타입의 일치 여부를 런타임에 확인 컴파일 타임에 확인
- row 타입으로 구성된 dataset
- row타입: 연산에 최적화된 인메모리 포맷의 내부적인 표현 방식
- jvm 기반의 언어인 스칼라, 자바에서만 지원
- dataset의 데이터 타입을 정의하려면 스칼라의
  case class나 javabean을 사용해야함

 

4.3.2 컬럼, 로우

column은 여러 타입 지원

  • 단순 데이터 타입 : 정수형, 문자열
  • 복합 데이터 타입 : 배열, 맵
  • null 값

row = 데이터 레코드

 

 

4.4 구조적 API의 실행 과정

  1. DataFrame/Dataset/SQL을 이용해 코드를 작성
  2. 정상적인 코드라면 스파크가 논리적 실행 계획으로 변환
  3. 스파크는 논리적 실행 계획을 물리적 실행 계획으로 변환하며 그 과정에서 추가적인 최적화를 할 수 있는지 확인
    • 카탈리스트 옵티마이저가 코드를 넘겨 받고 실제 실행 계획을 생성
  4. 클러스터에서 물리적 실행 계획(RDD 처리)을 실행 후 결과 반환

카탈리스트 옵티마이저

 

4.4.1 논리적 실행 계획

  • 추상적 트랜스포메이션만 표현
  • 드라이버나 익스큐터의 정보 고려 X
  • 사용자의 다양한 표현식을 최적화된 버전으로 변환
  • 사용자 코드는 '검증 전 논리적 실행 계획' 으로 변환
    • 검증전 논리적 실행 계획: 코드의 유효성과 테이블이나 컬럼의 존재 여부만을 판단하는 과정이므로 아직 실행 계획을 검증하지 않은 상태
  • 스파크 분석기가 컬럼과 테이블을 검증하기 위해 카탈로그, 모든 테이블의 저장소, dataframe 정보를 활용
  • 검증 결과는 카탈리스트 옵티마이저로 전달되어 최적화

 

4.4.2 물리적 실행 계획 (=스파크 실행 계획)

 

= 논리적 실행 계획을 클러스터 환경에서 실행하는 방법

  • 다양한 물리적 실행 전략을 생성하고 비용 모델을 비교한 후 최적의 전략을 선택
    • 테이블 크기, 파티션 수 등을 고려해 연산 수행에 필요한 것들 비교
  • 물리적 실행 계획은 일련의 RDD와 트랜스포메이션으로 변환됨
  • DataFrame, Dataset, SQL로 정의된 쿼리를 RDD 트랜스포메이션으로 컴파일 (따라서 스파크 = 컴파일러라고도 함)

 

4.4.3 실행

  • 물리적 실행 계획을 선정한 후 RDD를 대상으로 모든 코드를 실행

'Data Engineering' 카테고리의 다른 글

[스파크 완벽 가이드] 3. 스파크 기능  (0) 2024.03.14
[스파크 완벽 가이드] 2. 스파크 간단히 살펴보기  (2) 2024.03.14
[스파크 완벽 가이드] 1. 아파치 스파크  (0) 2024.03.14
'Data Engineering' 카테고리의 다른 글
  • [스파크 완벽 가이드] 3. 스파크 기능
  • [스파크 완벽 가이드] 2. 스파크 간단히 살펴보기
  • [스파크 완벽 가이드] 1. 아파치 스파크
myeunee
myeunee
누룽지
  • myeunee
    누룽지 블로그
    myeunee
  • 전체
    오늘
    어제
    • 분류 전체보기 (37) N
      • AWS (3)
      • ArgoCD (2)
      • Kubernetes (2)
      • GCP (4)
      • Spring Boot (1) N
      • Golang (5)
      • Data Engineering (4)
      • Docker (6)
      • Linux System (3)
      • 기타 (7)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
myeunee
[스파크 완벽 가이드] 4. 구조적 API 개요
상단으로

티스토리툴바