Aggregator[IN, BUF, OUT]
타입 안전한 커스텀 집계 함수를 정의하는 추상 클래스. zero/reduce/merge/finish 네 메서드를 구현하며, toColumn()으로 TypedColumn으로 변환해 Dataset.select나 KeyValueGroupedDataset.agg와 함께 쓴다.
Aggregator API — 타입 안전한 집계 함수를 직접 만든다
· Apache Spark 공식 Javadoc org.apache.spark.sql.expressions.Aggregator
ANALYZE TABLE
테이블/컬럼의 통계(크기, 행 수, min/max, distinct 값 개수 등)를 수집해 카탈로그에 저장하는 SQL 명령. CBO가 이 통계를 근거로 조인 순서 등을 결정한다. 스냅샷이라 자동 갱신되지 않는다.
비용 기반 옵티마이저(CBO)와 테이블 통계 — ANALYZE TABLE
· Databricks CBO 공식 문서 + japila.pl Spark SQL Internals(Cost-Based Optimization)
Apache Arrow (Spark 맥락)
JVM과 Python 프로세스가 같은 메모리 레이아웃을 공유(zero-copy)할 수 있게 하는 언어 무관 컬럼형 데이터 포맷. pandas UDF와 toPandas()/createDataFrame() 변환의 성능 기반이 된다.
PySpark UDF의 Arrow 최적화 — 설정과 UDAF 대안
· Apache Spark 공식 문서 Apache Arrow in PySpark 사용자 가이드
applyInPandasWithState
Spark 3.4부터 제공되는 PySpark 전용 임의 상태 처리 API. (key, Iterator[pandas.DataFrame], state)를 받아 Iterator[pandas.DataFrame]를 반환하며, mapGroupsWithState/flatMapGroupsWithState의 Python/pandas 버전에 해당한다.
applyInPandasWithState — PySpark 네이티브 임의 상태 처리와 그 후속 transformWithState
· PySpark 공식 문서 GroupedData.applyInPandasWithState 및 Databricks 블로그 Python Arbitrary Stateful Processing
approx_count_distinct
HyperLogLog 알고리즘 기반으로 컬럼의 고유값 개수를 근사 계산하는 함수. 정확한 countDistinct보다 훨씬 빠르다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
approxQuantile
지정한 허용오차(relError) 범위 내에서 근사 분위수를 계산하는 DataFrameStatFunctions 메서드. 정확한 계산보다 빠르게 근사값을 얻을 수 있다.
숫자 다루기: 산술 연산과 통계 함수
· Chapter 6: Working with Numbers 절 (PDF pp.91-96)
AQE (Adaptive Query Execution)
실행 중 통계를 반영해 셔플 파티션 병합, 스큐 조인 최적화, 조인 전략 변경 등을 자동으로 수행하는 Spark 3.0+ 기능. Spark 3.2부터 기본 활성화.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
AQEShuffleRead
AQE(Adaptive Query Execution)가 런타임에 실제 셔플 출력 크기를 보고 파티션 개수를 자동으로 병합할 때 실행 계획에 추가되는 물리 노드.
groupBy는 셔플이다 — spark.sql.shuffle.partitions 200과 AQE의 파티션 재조정
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "One groupBy, 200 tasks, and 151 files nobody wants" 구간 (17~22페이지)
Barrier Execution Mode
RDD.barrier()로 지정한 스테이지의 모든 태스크를 반드시 동시에 실행시키고, 하나라도 실패하면 스테이지 전체를 재시작하는 갱 스케줄링 방식. 분산 딥러닝 학습처럼 태스크 간 지속적 통신이 필요한 워크로드를 위해 Project Hydrogen의 일환으로 도입됐다.
Barrier Execution Mode — Spark 안에 MPI 스타일 분산 학습을 끼워넣기
· Apache Spark JIRA SPARK-24374(Project Hydrogen)
Broadcast Variable
읽기 전용 데이터를 각 노드에 캐시해두어 태스크마다 재전송하지 않도록 하는 변수. 작은 테이블과의 조인 셔플을 없애는 데 쓰인다.
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
Bucketing
테이블을 조인/집계 키의 해시값 기준으로 고정된 수의 버킷(파일)에 미리 나누어 저장하는 기법. 조인 시 셔플을 줄인다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
Bucketing(bucketBy)
DataFrameWriter.bucketBy로 저장 시점에 지정 컬럼 값을 해시해 데이터를 미리 정해진 개수의 버킷으로 분산 저장하는 기법. 양쪽 테이블이 같은 키·같은 버킷 수로 버킷팅돼 있으면 조인 시점의 셔플이 생략된다.
Bucketing과 Sort-Merge Bucket Join — 저장 시점에 미리 분산해 셔플을 없앤다
· japila.pl The Internals of Spark SQL — Bucketing, SPARK-27865
cache()
DataFrame의 계산 결과를 메모리에 저장해 이후 동일 DataFrame을 재사용할 때 재계산을 피하게 하는 메서드.
Dataset과 캐싱 — 타입 안전 API와 반복 접근 최적화
· Chapter 3: A Tour of Spark's Toolset - 개요, Datasets, Caching Data for Faster Access (pp.22-26)
cast
컬럼의 값을 다른 Spark 타입으로 변환하는 연산.
DataFrame 컬럼 조작: select/selectExpr, 리터럴, 추가·이름변경·제거·캐스팅
· Chapter 5: DataFrame Transformations - Creating DataFrames, Select & SelectExpr, Literals, Adding/Renaming/Removing Columns, Casting 절 (PDF pp.63-75)
Catalog
Spark가 유지하는 모든 테이블·DataFrame 메타데이터 저장소. analyzer가 컬럼/테이블을 resolve할 때 참조한다.
Structured API 실행 과정: 논리 계획에서 클러스터 실행까지
· Chapter 4: Overview of Structured API Execution - Logical Planning, Physical Planning, Execution 절 (PDF pp.51-53)
Catalyst
Spark 내부에서 쿼리 계획·최적화·실행을 담당하는 엔진. 언어와 무관하게 자체 타입 정보를 유지한다.
Catalyst 타입 시스템: untyped DataFrame vs typed Dataset
· Chapter 4: Overview of Structured Spark Types - Catalyst, DataFrame/Dataset 타입 차이, Columns, Rows 절 (PDF pp.45-47)
Catalyst Optimizer
Spark SQL의 쿼리 최적화 엔진. Analysis→Logical Optimization→Physical Planning→Code Generation 4단계로 동작한다.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
Change Data Feed(CDF)
Delta 테이블의 버전 간 행 단위 변경(삽입/수정/삭제)을 _change_type 등 메타데이터 컬럼과 함께 추적하는 Delta Lake 기능. delta.enableChangeDataFeed 테이블 속성으로 활성화한다.
Delta Lake Change Data Feed(CDF) — 테이블의 행 단위 변경 이력을 그대로 읽기
· Delta Lake 공식 문서 Change data feed
Checkpointing
RDD 상태를 안정적 스토리지에 저장하며 lineage를 완전히 제거하는 메커니즘. 긴 lineage로 인한 재계산 비용·스택 오버플로를 방지한다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
Client Mode / Cluster Mode
Driver가 제출 호스트에서 실행되면 Client Mode, 클러스터 내부 워커 노드에서 실행되면 Cluster Mode. 프로덕션은 Cluster Mode가 표준이다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
Cluster Manager
Driver의 리소스 요청을 받아 Executor를 실제로 실행시키는 계층. Standalone/YARN/Kubernetes가 현재 실무 표준이며 Mesos는 deprecated 되었다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
coalesce
전체 셔플 없이 기존 파티션들을 합쳐 파티션 수를 줄이는 연산.
결과 개수 제한, 파티셔닝(repartition/coalesce), 드라이버로 결과 수집
· Chapter 5: Limit, Repartition and Coalesce, Collecting Rows to the Driver 절 (PDF pp.81-84)
Continuous Processing
Structured Streaming의 실험적 실행 모드. 짧은 배치를 반복하는 대신 오래 실행되는 태스크로 데이터를 계속 읽고 처리하고 쓰며, 밀리초 단위 종단 간 지연시간을 노린다. 단, exactly-once가 아닌 at-least-once만 보장한다.
Continuous Processing — 마이크로배치를 포기하고 밀리초 지연을 얻는 실험적 모드
· Apache Spark 공식 문서 Structured Streaming Performance Tips
Cost Model
여러 물리적 실행 전략(예: 조인 방식) 중 테이블·파티션 크기 등 물리적 속성을 근거로 최적안을 고르는 데 쓰이는 비교 모델.
Structured API 실행 과정: 논리 계획에서 클러스터 실행까지
· Chapter 4: Overview of Structured API Execution - Logical Planning, Physical Planning, Execution 절 (PDF pp.51-53)
CrossValidator
ParamGridBuilder로 만든 파라미터 조합마다 k겹 교차검증(k개의 학습/테스트 데이터셋 쌍)으로 평가해 평균 성능이 가장 좋은 조합을 고르는 MLlib의 모델 선택 도구.
CrossValidator와 TrainValidationSplit — 파라미터 조합을 자동으로 평가하기
· Apache Spark 공식 문서 ML Tuning — model selection and hyperparameter tuning
DAG
Directed Acyclic Graph. Spark가 호출된 트랜스포메이션들을 기록해두는, 방향이 있고 순환하지 않는 실행 계획 그래프.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
Data Skew
특정 파티션에 데이터가 편중되어 일부 태스크만 비정상적으로 오래 걸리는 현상.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
DataFrame
행과 열, 스키마를 가진 표 형태의 분산 데이터 컬렉션. 한 머신이 아니라 클러스터 전체에 걸쳐 존재할 수 있다.
SparkSession, DataFrame, 파티션
· Chapter 2: A Gentle Introduction to Spark — Starting Spark, SparkSession, DataFrames, Partitions (pp.7-9)
이름이 붙은 컬럼으로 구성된 분산 데이터 컬렉션. Catalyst/Tungsten 최적화를 받는다.
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
DataFrame (untyped)
스키마 타입 일치 여부를 런타임에만 검사하는 구조화 컬렉션. Scala에서는 Dataset[Row]와 동일하다.
Catalyst 타입 시스템: untyped DataFrame vs typed Dataset
· Chapter 4: Overview of Structured Spark Types - Catalyst, DataFrame/Dataset 타입 차이, Columns, Rows 절 (PDF pp.45-47)
DataFrame.explain() 모드
explain(mode=...)로 선택하는 5가지 실행 계획 출력 방식(simple/extended/codegen/cost/formatted). 각각 물리 계획만, 4단계 논리+물리 계획 전부, 생성된 코드, 비용 통계, 트리+노드 상세 레이아웃을 보여준다.
DataFrame.explain() 다섯 가지 모드 — 무엇을 보고 싶은지에 따라 달라지는 출력
· PySpark 공식 문서 DataFrame.explain
DataFrameReader
SparkSession에 연결되어 CSV, JSON 등 다양한 포맷과 옵션(inferSchema, header 등)으로 데이터를 읽어 DataFrame을 만드는 컴포넌트.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
DataFrameStatFunctions / DataFrameNaFunctions
DataFrame의 서브모듈. 전자는 통계 관련 함수(상관계수, 분위수 등), 후자는 null 데이터 처리 함수를 모아 둔 도메인 특화 API다.
표현식 API 지도와 불리언(Boolean) 다루기
· Chapter 6: Working with Different Types of Data - Chapter Overview, Where to Look for APIs, Working with Booleans 절 (PDF pp.85-91)
Dataset
Row가 아닌 사용자 정의 JVM 객체(case class/Java bean)를 다루는 Spark의 타입 세이프 API. Scala/Java에서만 사용 가능하다.
Dataset과 캐싱 — 타입 안전 API와 반복 접근 최적화
· Chapter 3: A Tour of Spark's Toolset - 개요, Datasets, Caching Data for Faster Access (pp.22-26)
DataFrame에 컴파일 타임 타입 안정성을 더한 API. Scala/Java 전용이며 PySpark에는 해당 개념이 없다.
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
Dataset (typed)
컴파일 타임에 타입을 검사하는 구조화 컬렉션. Scala/Java 등 JVM 언어에서만 사용 가능하며 case class/Java bean으로 타입을 지정한다.
Catalyst 타입 시스템: untyped DataFrame vs typed Dataset
· Chapter 4: Overview of Structured Spark Types - Catalyst, DataFrame/Dataset 타입 차이, Columns, Rows 절 (PDF pp.45-47)
Deletion Vector
Roaring Bitmap 기반의 압축된 비트맵으로, base Parquet 파일을 다시 쓰지 않고 삭제된 행의 위치만 기록하는 Delta Lake의 구조. 작으면 트랜잭션 로그에 인라인으로, 크면 별도 파일로 저장된다.
Delta Lake Deletion Vectors — 파일을 안 지우고 마스크만 남긴다
· Delta Lake 공식 블로그 Deletion Vectors, Microsoft Learn Deletion vectors in Databricks
Delta Lake CHECK 제약
ALTER TABLE ... ADD CONSTRAINT로 테이블에 추가하는, 값이 특정 불리언 조건을 만족해야 한다는 제약. 테이블 메타데이터에 delta.constraints.<이름> 형태로 저장되며, 이를 위반하는 쓰기는 거부된다.
Delta Lake CHECK/NOT NULL 제약 — 스키마를 넘어 값 자체를 검증한다
· Databricks 공식문서 ALTER TABLE ADD CONSTRAINT
Delta Lake Time Travel
VERSION AS OF 또는 TIMESTAMP AS OF로 Delta 테이블의 과거 특정 시점 스냅샷을 그대로 조회하는 기능. 트랜잭션 로그와 그 시점에 참조된 데이터 파일이 남아있어야만 동작한다.
Delta Lake Time Travel — VACUUM이 지운 과거는 되돌아갈 수 없다
· Delta Lake 공식 블로그 Time Travel, Microsoft Fabric 공식문서 Delta Lake time travel
distinct
하나 이상의 컬럼 값 기준으로 중복 행을 제거해 새 DataFrame을 반환하는 트랜스포메이션.
행 필터링, 고유값, 샘플링, 합치기, 정렬
· Chapter 5: Filtering Rows, Getting Unique Rows, Random Samples/Splits, Concatenating and Appending Rows, Sorting Rows 절 (PDF pp.75-81)
Driver
사용자 코드의 main()이 실행되며 DAG 생성·스테이지/태스크 분할·스케줄링·결과 수집을 담당하는 Spark 애플리케이션의 중심 프로세스.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
dropDuplicates([cols])
지정한 컬럼 조합이 같은 행을 중복으로 간주해 제거하는 메서드. 인자를 생략하면 전체 컬럼이 완전히 같은 행만 중복으로 판단한다.
대소문자 정규화와 dropDuplicates()의 함정 — 정제는 기본값이 아니라 선택이다
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "The lower() call earns its place too" ~ "dropDuplicates() misses the duplicates that matter" 구간 (11~14페이지)
Dynamic Allocation
워크로드에 따라 Executor 수를 자동으로 늘리거나 줄이는 Spark 기능.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
Dynamic Partition Pruning(DPP)
Spark 3.0+ 기본 최적화. 조인 상대편(작은 테이블)의 브로드캐스트 해시 테이블에서 뽑은 키 값을, 파티셔닝된 큰 테이블의 파티션 스캔 필터로 동적 주입해 불필요한 파티션 스캔을 없앤다.
Dynamic Partition Pruning — 조인 상대편 필터를 파티션 스캔에 재사용하기
· Apache Spark JIRA SPARK-11150 및 커뮤니티 기술 자료
equi-join
조인 조건이 '컬럼 = 컬럼' 형태의 동등 비교로만 구성된 조인. Broadcast/Sort-Merge/Shuffled Hash Join은 모두 equi-join을 전제로 하고, 범위 비교 등 비-equi 조인에는 Nested Loop 계열만 적용 가능하다.
조인 전략 선택 — 힌트와 4가지 물리적 조인 방식
· Spark 4.2.0 공식 문서 sql-performance-tuning.html — Join Strategy Hints
Executor
워커 노드에서 실행되며 Driver가 할당한 태스크를 처리하고 데이터를 메모리/디스크에 저장하는 프로세스.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
explain plan / 물리 실행 계획
DataFrame의 트랜스포메이션 계보를 위(최종 결과)에서 아래(원천 데이터) 순으로 보여주는 실행 계획. explain()으로 확인한다.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
explode
배열이나 맵을 담은 컬럼을 원소 단위로 행을 펼치는 함수. 배열은 원소 개수만큼 행이 늘어나고, 맵은 key/value 두 컬럼으로 펼쳐진다.
null 다루기와 복합 타입(구조체·배열·맵)
· Chapter 6: Working with Nulls in Data, Working with Complex Types 절 (PDF pp.111-119)
expr()
문자열로 표현된 컬럼 참조나 트랜스포메이션을 파싱해 Column 표현식으로 만들어주는 함수. col()보다 유연하며 SQL과 동일한 논리 트리로 컴파일된다.
DataFrame 스키마 정의와 컬럼·표현식
· Chapter 5: Basic Structured Operations - Schemas, Columns and Expressions, Records and Rows 절 (PDF pp.54-63)
External Shuffle Service
워커 노드에 executor와 독립적으로 상시 떠서 셔플 파일을 서빙하는 프로세스. executor가 회수/재시작돼도 셔플 데이터를 계속 제공할 수 있게 해준다.
Executor·Driver 자원 할당 메커니즘과 효율적 사이징
· 웹 리서치 종합 — spark-submit 설정 가이드, executor 사이징 경험칙, Dynamic Allocation 공식 문서
foreachBatch
Structured Streaming에서 각 마이크로배치의 출력을 평범한 배치 DataFrame으로 노출해, 배치 모드 로직(여러 싱크에 쓰기, 배치 전용 커넥터 사용 등)을 자유롭게 적용할 수 있게 해주는 싱크.
foreachBatch — 마이크로배치 출력을 평범한 배치 DataFrame처럼 다루기
· Databricks 공식 문서 Use foreachBatch to write to arbitrary data sinks
ForeachWriter
Structured Streaming의 foreach() 싱크에서 레코드 단위 쓰기 로직을 구현하는 인터페이스. open/process/close 세 메서드를 구현하며, 연결 관리와 에러 처리를 개발자가 직접 책임진다.
foreach()/ForeachWriter — 마이크로배치가 아니라 레코드 하나씩 쓴다
· Databricks 공식 문서 Use foreachBatch to write to arbitrary data sinks
from_json / to_json
to_json은 StructType 컬럼을 JSON 문자열로 직렬화하고, from_json은 지정한 스키마에 맞춰 JSON 문자열을 다시 구조화된 컬럼으로 역직렬화한다.
JSON 다루기와 사용자 정의 함수(UDF)
· Chapter 6: Working with JSON, User-Defined Functions 절 (PDF pp.119-126)
Generated Column
GENERATED ALWAYS AS (표현식)으로 같은 테이블의 다른 컬럼 값에서 자동 계산되는 컬럼. 파티션 키로 쓰면, 사용자가 그 파티션 컬럼을 직접 필터링하지 않아도 원본 컬럼 필터로부터 파티션 프루닝이 자동 유도된다.
Delta Lake Generated Columns — 파티션 필터를 자동으로 유도한다
· Databricks 공식문서 Delta Lake generated columns
get_json_object / json_tuple
JSON 문자열 컬럼에서 값을 조회하는 함수. get_json_object는 JSON 경로 표현식으로 임의 깊이를 조회하고, json_tuple은 한 단계만 중첩된 JSON에서 여러 키를 동시에 꺼낸다.
JSON 다루기와 사용자 정의 함수(UDF)
· Chapter 6: Working with JSON, User-Defined Functions 절 (PDF pp.119-126)
GraphFrames
Spark의 Structured API 위에서 그래프(정점·엣지) 분석을 손쉽게 할 수 있게 하는 패키지. GraphX를 기반으로 한다.
Spark 패키지 생태계와 GraphFrames
· Chapter 3: A Tour of Spark's Toolset - Spark's Ecosystem and Packages, GraphFrames (pp.38-43)
GraphX
Spark의 원조 그래프 분석 라이브러리로, GraphFrames가 이 위에 구축되어 PageRank 등 내장 알고리즘을 제공받는다.
Spark 패키지 생태계와 GraphFrames
· Chapter 3: A Tour of Spark's Toolset - Spark's Ecosystem and Packages, GraphFrames (pp.38-43)
GROUPED_MAP(pandas_udf)
그룹 하나에 해당하는 전체 pandas.DataFrame을 입력받아 임의 형태로 수정·반환할 수 있는 pandas_udf 타입. groupBy().applyInPandas()의 split-apply-combine 패턴이 이를 구현한다.
pandas_udf 타입 — SCALAR/GROUPED_MAP/GROUPED_AGG의 서로 다른 입출력 계약
· Apache Spark 공식문서 pyspark.sql.functions.pandas_udf
GroupState
mapGroupsWithState/flatMapGroupsWithState의 상태 갱신 함수가 이전 상태를 받아 읽고·갱신·삭제할 수 있게 해주는 타입. 세 가지 타임아웃 방식(없음/처리시간/이벤트시간) 중 하나를 지정해 그룹별 상태 만료를 제어한다.
mapGroupsWithState/flatMapGroupsWithState — GroupState로 임의의 상태 로직 짜기
· The Internals of Spark Structured Streaming — mapGroupsWithState
HashPartitioner
RDD의 키 기반 셔플 연산에서 기본으로 사용되는 파티셔닝 전략. 키의 해시값을 기준으로 레코드를 파티션에 분배한다.
70개 질문 블로그로 보는 추가 확인 사항 — 파티셔너와 튜닝 체크리스트
· 70 Spark Interview Questions for Data Engineers (전체 50문항 + FAQ)
IcebergSparkSessionExtensions
Spark SQL에 Iceberg 전용 행 단위 연산(MERGE/UPDATE/DELETE)을 추가하는 세션 확장. spark.sql.extensions 설정에 등록해야 활성화된다.
Spark와 Iceberg/Delta Lake 연동 — 카탈로그 설정과 MERGE INTO
· Apache Iceberg 공식 문서 Spark Configuration/DDL 가이드
InMemoryTableScan
캐싱된 DataFrame을 다시 읽을 때 Spark UI 실행 계획에 나타나는 노드. 원본 소스를 다시 스캔하는 Scan csv/Scan parquet 대신 메모리에 저장된 결과를 바로 읽는다는 뜻이다.
조인 결과는 반드시 행 수로 검증한다 — cache(), left_anti join, BroadcastHashJoin 확인
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "The join is fast because 400 rows fit in memory" 구간 (14~17페이지)
Kryo Serialization
Java 직렬화보다 빠르고 컴팩트한 직렬화 라이브러리. 최고 성능을 위해 커스텀 클래스 등록이 권장된다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
left_anti join
오른쪽 테이블에 매칭되는 키가 없는 왼쪽 테이블의 행만 반환하는 조인 방식. inner join이 버린 행을 정확히 되짚어 찾을 때 쓴다.
조인 결과는 반드시 행 수로 검증한다 — cache(), left_anti join, BroadcastHashJoin 확인
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "The join is fast because 400 rows fit in memory" 구간 (14~17페이지)
Lineage(계보)
RDD를 만들어낸 일련의 트랜스포메이션 기록. 파티션 유실 시 이 기록을 따라 원본부터 재계산해 복구한다.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
Liquid Clustering
CLUSTER BY로 클러스터링 컬럼을 지정하는 Delta Lake의 최신 테이블 레이아웃 전략. 전통 파티셔닝·ZORDER를 대체하며, 클러스터링 컬럼을 언제든 바꿀 수 있고 이미 클러스터링된 파일은 명시적으로 지시하지 않는 한 재작업하지 않는다는 유연성이 특징이다.
Delta Lake Liquid Clustering — 파티션도 Z-Order도 아닌 세 번째 방식
· Delta Lake 공식 블로그 Liquid Clustering
lit()
프로그래밍 언어의 상수 값을 Spark가 이해하는 리터럴 표현식으로 변환하는 함수.
DataFrame 컬럼 조작: select/selectExpr, 리터럴, 추가·이름변경·제거·캐스팅
· Chapter 5: DataFrame Transformations - Creating DataFrames, Select & SelectExpr, Literals, Adding/Renaming/Removing Columns, Casting 절 (PDF pp.63-75)
local[*]
SparkSession의 마스터 URL 설정 중 하나로, 드라이버와 익스큐터를 한 프로세스 안에서 실행하며 머신이 가진 모든 코어를 사용하는 로컬 실행 모드.
로컬 Spark 세션과 파티션의 실체 — 코어 개수가 아니라 파티션 개수가 병렬성을 정한다
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — Setup, SparkSession, Partitions (문서 상단부)
mapInPandas
pandas.DataFrame 이터레이터를 다른 pandas.DataFrame 이터레이터로 변환하는 PySpark DataFrame 메서드. groupBy() 없이 파티션 단위로 동작하며, 입력과 출력 배치의 개수·크기가 서로 달라도 된다.
mapInPandas — 그룹 없이 파티션 단위로 pandas 변환을 적용한다
· Apache Spark 공식문서 pyspark.sql.DataFrame.mapInPandas
maxFilesPerTrigger
스트리밍 읽기 시 한 트리거마다 읽어들일 최대 파일 수를 제한하는 옵션. 데모에서 스트리밍 유입을 흉내 낼 때 쓰이며 실제 운영에서는 보통 생략한다.
Structured Streaming 첫걸음 — 배치를 스트리밍으로
· Chapter 3: A Tour of Spark's Toolset - Structured Streaming (pp.26-32)
MemoryConsumer
TaskMemoryManager에 등록되어 페이지를 할당/반납하고, 메모리 압박 시 스필 요청을 받는 컴포넌트(BytesToBytesMap, UnsafeExternalSorter 등).
Executor 내부 메모리 모델 — Unified Memory Manager와 페이지(세그먼트) 단위 할당
· 웹 리서치 종합 — Unified Memory Manager 구조, TaskMemoryManager/MemoryBlock 페이지 할당 메커니즘(japila.pl Spark Internals 기준)
memoryOverhead
JVM 힙 밖에서 executor 프로세스가 실제로 쓰는 메모리(네이티브 라이브러리, 스레드 스택, 오프힙 버퍼 등)에 대비해 클러스터 매니저에 추가로 요청하는 여유분.
Executor·Driver 자원 할당 메커니즘과 효율적 사이징
· 웹 리서치 종합 — spark-submit 설정 가이드, executor 사이징 경험칙, Dynamic Allocation 공식 문서
MLlib
전처리, 모델 학습, 예측을 대규모 데이터에서 수행할 수 있게 하는 Spark의 내장 머신러닝 라이브러리.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
MLWriter/MLReader
MLlib 파이프라인/모델을 디스크에 저장(save)하고 다시 불러오는(load) 유틸리티 클래스. Scala/Java/Python/R 중 어떤 언어로 저장했든 다른 언어에서 불러올 수 있고, 이후 Spark 버전에서도 하위 호환을 유지한다.
ML Pipeline 모델 영속화 — 언어 경계를 넘나드는 save/load
· Apache Spark 공식 문서 ML Pipelines — Persistence
multipleWatermarkPolicy
쿼리에 여러 워터마크(예: Stream-Stream Join의 양쪽 입력)가 있을 때 이를 하나의 전역 워터마크로 합치는 정책. min(기본값, 가장 느린 스트림 기준, 안전하지만 지연 가능)과 max(가장 빠른 스트림 기준, 지연은 적지만 느린 스트림 데이터를 공격적으로 버림) 중 선택한다.
다중 워터마크 정책 — 여러 스트림의 워터마크가 다르면 무엇을 기준으로 삼는가
· Apache Spark 공식문서 Structured Streaming Programming Guide
na 서브패키지
DataFrame의 null 처리 전용 API(DataFrameNaFunctions). drop/fill/replace 세 가지 주요 동작을 제공한다.
null 다루기와 복합 타입(구조체·배열·맵)
· Chapter 6: Working with Nulls in Data, Working with Complex Types 절 (PDF pp.111-119)
narrow dependency
각 입력 파티션이 오직 하나의 출력 파티션에만 기여하는 트랜스포메이션(예: where/filter). 파이프라이닝으로 메모리 내에서 처리된다.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
Narrow Transformation
부모 파티션 하나가 자식 파티션 하나에만 대응되어 셔플 없이 처리되는 트랜스포메이션(예: map, filter).
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
OneHotEncoder
정수 인덱스로 표현된 카테고리를 카테고리별 boolean 컬럼으로 펼쳐 잘못된 서열 관계를 제거하는 변환기.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
OPTIMIZE
Delta Lake 테이블의 작은 파일들을 더 큰 파일로 압축(bin-packing)하는 명령. ZORDER BY와 함께 쓰면 특정 컬럼 기준으로 관련 데이터를 같은 파일에 모아 데이터 스키핑 효율도 높인다.
Delta Lake 유지보수 — OPTIMIZE/ZORDER로 압축·정렬, VACUUM으로 청소
· Delta Lake 공식 문서 Compaction and Z-Ordering, Utility commands
outputMode
스트리밍 쿼리 결과를 sink에 어떻게 반영할지 지정하는 옵션. complete는 매 트리거마다 전체 결과를 다시 쓴다.
Structured Streaming 첫걸음 — 배치를 스트리밍으로
· Chapter 3: A Tour of Spark's Toolset - Structured Streaming (pp.26-32)
PageRank
노드가 받는 링크(엣지)의 수와 질을 근거로 그래프 내 노드의 상대적 중요도를 추정하는 알고리즘.
Spark 패키지 생태계와 GraphFrames
· Chapter 3: A Tour of Spark's Toolset - Spark's Ecosystem and Packages, GraphFrames (pp.38-43)
pandas API on Spark(pyspark.pandas)
pandas와 호환되는 문법을 제공하면서 실제 연산은 Spark 클러스터에 분산 실행하는 PySpark 내장 API. 별도 프로젝트였던 Koalas가 PySpark 안으로 흡수돼 이 이름이 됐다.
pandas API on Spark — Koalas가 PySpark 안으로 흡수된 이유
· Apache Spark 공식 문서 Migrating from Koalas to pandas API on Spark
persist()
cache()보다 유연하게 메모리·디스크 등 다양한 저장 레벨을 지정해 데이터를 저장하는 메서드. 데이터가 메모리 용량을 초과할 때 사용한다.
Dataset과 캐싱 — 타입 안전 API와 반복 접근 최적화
· Chapter 3: A Tour of Spark's Toolset - 개요, Datasets, Caching Data for Faster Access (pp.22-26)
Pipeline
여러 변환기·추정기 단계를 순서대로 묶어 fit/transform을 일관되게 재사용할 수 있게 하는 MLlib 구성 요소.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
Predicate Pushdown
필터 조건을 데이터 소스 스캔 단계로 내려보내 불필요한 I/O를 줄이는 최적화.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
Project Tungsten
Off-heap 메모리 관리와 Whole-Stage Code Generation으로 Spark의 CPU/메모리 효율을 높이는 프로젝트.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
Python Data Source API
Spark 4.0에서 도입된, Python으로 커스텀 데이터소스·싱크를 구현할 수 있게 하는 API(pyspark.sql.datasource). DataSource/DataSourceReader 클래스를 서브클래싱해 구현하며, spark-learn-74의 Java 기반 DataSource V2를 Python에서 직접 쓸 수 있게 연 것이다.
Python Data Source API — Scala 없이 커스텀 데이터소스를 만든다
· Apache Spark 공식문서 Python Data Source API tutorial
quarantine 테이블
정합성 검증에 실패한 레코드를 삭제하지 않고 별도로 적재해 두는 테이블. 원인 추적과 재처리를 위해 사용한다.
대소문자 정규화와 dropDuplicates()의 함정 — 정제는 기본값이 아니라 선택이다
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "The lower() call earns its place too" ~ "dropDuplicates() misses the duplicates that matter" 구간 (11~14페이지)
rangeBetween
윈도우 프레임의 경계를 물리적 행 개수가 아니라 ORDER BY 기준 컬럼의 값 차이로 정하는 방식. 동점 행을 전부 포함시킬 수 있어 rowsBetween과 다르게 동작한다.
Window Function Frame 경계 — rowsBetween과 rangeBetween의 차이
· Apache Spark 공식 문서 pyspark.sql.Window.rowsBetween/rangeBetween
RDD
불변이며 파티션 단위로 클러스터에 분산된 Spark의 기본 데이터 구조. lineage를 통해 장애 시 재계산으로 복구된다.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
RDD(Resilient Distributed Dataset)
DataFrame·Dataset·SQL 테이블과 함께 Spark가 제공하는 핵심 분산 데이터 추상화 중 하나로, 파티션을 더 낮은 수준에서 직접 다룰 수 있는 인터페이스.
SparkSession, DataFrame, 파티션
· Chapter 2: A Gentle Introduction to Spark — Starting Spark, SparkSession, DataFrames, Partitions (pp.7-9)
RelationalGroupedDataset
groupBy 호출 직후 얻는 중간 결과 타입. 그루핑 정보만 지정된 상태로, 집계 함수를 추가 지정해야 조회 가능한 DataFrame이 된다.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
repartition
항상 전체 셔플을 일으켜 지정한 파티션 수·기준 컬럼으로 데이터를 재분배하는 연산.
결과 개수 제한, 파티셔닝(repartition/coalesce), 드라이버로 결과 수집
· Chapter 5: Limit, Repartition and Coalesce, Collecting Rows to the Driver 절 (PDF pp.81-84)
RESTORE TABLE
Delta 테이블을 지정한 과거 버전·시점으로 영구적으로 되돌리는 명령. spark-learn-68의 Time Travel이 과거를 '조회'만 하는 것과 달리, 테이블의 현재 상태 자체를 그 시점으로 되돌린다. 히스토리 자체를 지우지 않고 트랜잭션 로그를 갱신하는 메타데이터 전용 작업이다.
RESTORE TABLE — Time Travel은 '보기'만, RESTORE는 실제로 '되돌리기'
· Databricks 공식문서 RESTORE
RocksDBStateStoreProvider
Structured Streaming의 상태 저장소 구현체(Spark 3.2+). 상태 데이터를 JVM 힙 대신 네이티브 메모리+로컬 디스크에 저장해, 수백만 키 규모에서 기본 구현(HDFSBackedStateStore)이 겪는 GC 압박을 회피한다.
RocksDB State Store Provider — 대용량 스트리밍 상태의 GC 압박 해결
· Apache Spark 공식 문서 Structured Streaming Programming Guide — State Store
Row
Spark의 내부 최적화 인메모리 포맷을 나타내는 타입. 모든 언어에서 DataFrame의 레코드로 쓰이며, 물리적 바이트 배열을 표현한다.
Catalyst 타입 시스템: untyped DataFrame vs typed Dataset
· Chapter 4: Overview of Structured Spark Types - Catalyst, DataFrame/Dataset 타입 차이, Columns, Rows 절 (PDF pp.45-47)
Salting
조인 키에 무작위 접두사를 붙여 스큐된 키를 여러 파티션으로 분산시키는 기법.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
Schema Enforcement(Delta Lake)
Delta Lake가 기본으로 채택한 정책으로, 쓰려는 데이터의 스키마가 테이블과 다르면 쓰기 자체를 거부한다. 명시적으로 옵션을 켜지 않는 한 예상 못 한 스키마 변경이 조용히 반영되는 것을 막는다.
Delta Lake Schema Enforcement vs Schema Evolution — 기본은 거부, 옵션으로 허용
· Delta Lake 공식 블로그 Schema Enforcement, Schema Evolution
schema-on-read
스키마를 미리 정의하지 않고 데이터 소스를 읽을 때 자동으로 타입을 추론하는 방식.
DataFrame 스키마 정의와 컬럼·표현식
· Chapter 5: Basic Structured Operations - Schemas, Columns and Expressions, Records and Rows 절 (PDF pp.54-63)
Shuffle
데이터를 파티션 간 재분배하는 과정. 직렬화·디스크 I/O·네트워크 전송을 수반해 Spark에서 가장 비용이 큰 연산이다.
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
Shuffle Tracking
Spark 3.0부터 도입된 대안 메커니즘 — ESS 없이도 executor가 서빙 중인 셔플 데이터를 추적해, 그 데이터가 더 이상 필요 없어질 때까지 Dynamic Allocation의 executor 회수를 보류한다.
Executor·Driver 자원 할당 메커니즘과 효율적 사이징
· 웹 리서치 종합 — spark-submit 설정 가이드, executor 사이징 경험칙, Dynamic Allocation 공식 문서
SimpleDateFormat
Java의 날짜/시간 포맷 표준. Spark의 unix_timestamp 등에서 비표준 날짜 문자열을 파싱할 때 지정하는 포맷 패턴(예: yyyy-dd-MM)의 기준이 된다.
날짜와 타임스탬프 다루기
· Chapter 6: Working with Dates and Timestamps 절 (PDF pp.105-111)
skewedPartitionFactor / skewedPartitionThresholdInBytes
스큐 파티션 판정 기준. 중간값 대비 배수(기본 5.0)와 절대 크기(기본 256MB) 두 조건을 동시에 만족해야 스큐로 판정한다.
AQE(Adaptive Query Execution) 세부 설정 완전정복
· Spark 4.2.0 공식 문서 sql-performance-tuning.html — AQE 설정 전체 목록
small files problem
작은 파일이 과도하게 많이 쌓여, 파일마다 붙는 메타데이터·오픈 비용 때문에 쿼리 성능이 저하되는 문제. 잦은 적재 주기와 과도한 셔플 파티션 수가 주요 원인이다.
AQE를 껐을 때와 켰을 때 — small files problem을 숫자로 확인하기
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "The cost of losing that safety net shows up on disk" 구간 (22~24페이지)
Sort-Merge Join
조인 키로 양쪽 테이블을 셔플·정렬한 뒤 병합하는 대용량 테이블 조인 전략. 사전 버킷팅+정렬로 셔플/정렬을 생략할 수 있다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
sortWithinPartitions
전체 데이터를 셔플해 정렬하는 대신 각 파티션 내부에서만 정렬을 수행하는 최적화용 메서드.
행 필터링, 고유값, 샘플링, 합치기, 정렬
· Chapter 5: Filtering Rows, Getting Unique Rows, Random Samples/Splits, Concatenating and Appending Rows, Sorting Rows 절 (PDF pp.75-81)
Spark Connect
얇은 클라이언트가 DataFrame 연산을 미해석 논리계획으로 인코딩해 gRPC로 원격 Spark 드라이버에 전송하고 실행 결과를 Arrow로 스트리밍받는 클라이언트-서버 아키텍처. 클라이언트와 드라이버가 서로 다른 프로세스(심지어 다른 머신)에서 실행된다.
Spark Connect — 드라이버와 클라이언트를 분리하는 클라이언트-서버 아키텍처
· Apache Spark 공식 문서 Spark Connect Overview
Spark Packages
커뮤니티가 spark-packages.org 등에 배포하는 Spark 확장 라이브러리 생태계. 특정 도메인·기능에 최적화된 Spark 활용을 제공한다.
Spark 패키지 생태계와 GraphFrames
· Chapter 3: A Tour of Spark's Toolset - Spark's Ecosystem and Packages, GraphFrames (pp.38-43)
Spark UI (localhost:4040)
드라이버 프로세스가 노출하는 내장 모니터링 도구. Jobs/Stages/SQL 탭 등에서 실행 계획과 실제 처리량을 확인할 수 있다.
로컬 Spark 세션과 파티션의 실체 — 코어 개수가 아니라 파티션 개수가 병렬성을 정한다
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — Setup, SparkSession, Partitions (문서 상단부)
spark-submit
인터랙티브 콘솔 없이 미리 작성된 사용자 코드를 하나의 독립된 애플리케이션으로 클러스터에 제출·실행하는 방식.
SparkSession, DataFrame, 파티션
· Chapter 2: A Gentle Introduction to Spark — Starting Spark, SparkSession, DataFrames, Partitions (pp.7-9)
spark.eventLog.enabled/spark.eventLog.dir
애플리케이션 실행 중 발생한 이벤트(잡·스테이지·태스크 등)를 파일로 기록해 History Server가 나중에 UI를 재구성할 수 있게 하는 설정. eventLog.dir는 HDFS나 로컬 경로를 지정한다.
History Server — 잡이 끝난 뒤에도 Spark UI를 다시 열어본다
· Apache Spark 공식문서 Monitoring and Instrumentation
spark.kryo.registrationRequired
true로 켜면 Kryo에 등록되지 않은 클래스를 직렬화하려 할 때 예외를 던진다. 어떤 커스텀 클래스가 빠졌는지 조기에 발견하는 용도로 쓴다.
셔플·직렬화·압축·스케줄링 설정 총정리 — 실전 튜닝 체크리스트
· Spark 4.2.0 공식 문서 configuration.html — Serialization/Compression/Scheduling 설정 종합
spark.sql.adaptive.coalescePartitions.parallelismFirst
true(기본)면 파티션 크기 목표보다 병렬성 확보를 우선해 작은 파티션도 잘 합치지 않는다. false면 advisoryPartitionSizeInBytes 목표 크기에 맞춰 더 적극적으로 병합한다.
AQE(Adaptive Query Execution) 세부 설정 완전정복
· Spark 4.2.0 공식 문서 sql-performance-tuning.html — AQE 설정 전체 목록
spark.sql.ansi.enabled
SQL 표준(ANSI) 캐스팅·연산 규칙을 적용할지 정하는 설정. Spark 4부터 기본값이 true로 바뀌어, 잘못된 캐스팅이 조용한 NULL 대신 예외를 발생시킨다.
ANSI 모드와 캐스트 에러 — 크래시와 조용한 데이터 손실 중 무엇을 고를 것인가
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "Eight rows out of 3,384 will kill the whole job" 구간 (8~10페이지)
spark.sql.execution.pythonUDF.arrow.enabled
pandas UDF가 아닌 일반 스칼라 Python UDF에도 Arrow 기반 배치 전송을 적용하는 설정. 함수를 pandas UDF로 재작성하지 않고도 데이터 전송 구간만 가속한다.
PySpark UDF의 Arrow 최적화 — 설정과 UDAF 대안
· Apache Spark 공식 문서 Apache Arrow in PySpark 사용자 가이드
spark.sql.files.openCostInBytes
파일 하나를 여는 데 드는 비용을 가상의 바이트 크기로 환산한 값(기본 4MB). 작은 파일이 많을수록 이 값이 누적되어 실제 데이터량보다 파티션이 더 잘게 나뉘는 원인이 된다.
셔플·직렬화·압축·스케줄링 설정 총정리 — 실전 튜닝 체크리스트
· Spark 4.2.0 공식 문서 configuration.html — Serialization/Compression/Scheduling 설정 종합
spark.sql.shuffle.partitions
DataFrame/SQL API에서 셔플 발생 시 결과 파티션 개수를 지정하는 설정. 기본값은 200이며 RDD의 파티셔너 클래스 선택과는 별개다.
70개 질문 블로그로 보는 추가 확인 사항 — 파티셔너와 튜닝 체크리스트
· 70 Spark Interview Questions for Data Engineers (전체 50문항 + FAQ)
DataFrame/SQL 셔플이 일어날 때 결과를 나눌 파티션 개수. 기본값 200은 결과 행 수와 무관하게 고정 적용된다.
groupBy는 셔플이다 — spark.sql.shuffle.partitions 200과 AQE의 파티션 재조정
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "One groupBy, 200 tasks, and 151 files nobody wants" 구간 (17~22페이지)
SparkSession
드라이버 프로세스가 사용자에게 드러나는 형태로, 사용자 정의 조작을 클러스터 전역에 실행시키는 진입점. 인터랙티브 콘솔에서는 spark 변수로 제공된다.
SparkSession, DataFrame, 파티션
· Chapter 2: A Gentle Introduction to Spark — Starting Spark, SparkSession, DataFrames, Partitions (pp.7-9)
Spark 2.0부터 SparkContext/SQLContext/HiveContext를 하나로 통합한 Spark 상호작용의 단일 진입점.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
Speculative Execution
비정상적으로 느린 태스크를 감지해 다른 노드에서 복제 실행하고, 먼저 끝난 결과를 채택하는 메커니즘. 기본값은 비활성(false)이다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
Stage
셔플 경계를 기준으로 나뉜 Job의 물리적 실행 단위. 파티션 수만큼의 Task로 다시 나뉜다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
Stream-Stream Join 상태 버퍼링
두 스트림을 조인할 때 양쪽 입력을 각각 스트리밍 상태로 저장해두고 상대편의 미래 매칭 레코드를 기다리는 메커니즘. 워터마크/시간 조건이 없으면 상태가 무기한 쌓인다.
Stream-Stream Join — 두 스트림을 실시간으로 맞춰 붙이기
· Apache Spark 공식문서 Structured Streaming Programming Guide — Join Operations
StringIndexer
문자열 카테고리 컬럼을 정수 인덱스로 변환하는 MLlib 전처리 변환기.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
struct
여러 컬럼을 하나로 묶어 중첩된 DataFrame처럼 다루는 복합 타입. dot 문법(col.field)으로 내부 필드에 접근한다.
null 다루기와 복합 타입(구조체·배열·맵)
· Chapter 6: Working with Nulls in Data, Working with Complex Types 절 (PDF pp.111-119)
StructField
스키마를 구성하는 개별 필드. 이름, 데이터 타입, nullable 여부(기본값 true)를 갖는다.
DataFrame 스키마 정의와 컬럼·표현식
· Chapter 5: Basic Structured Operations - Schemas, Columns and Expressions, Records and Rows 절 (PDF pp.54-63)
StructType
DataFrame의 스키마를 나타내는 타입. 여러 StructField의 시퀀스로 구성되며 동일한 이름의 필드는 허용되지 않는다.
DataFrame 스키마 정의와 컬럼·표현식
· Chapter 5: Basic Structured Operations - Schemas, Columns and Expressions, Records and Rows 절 (PDF pp.54-63)
Structured Streaming
배치 DataFrame/SQL 연산을 증분(incremental) 처리 방식으로 재사용해 실행하는 Spark의 스트림 처리 엔진. Spark 2.2부터 프로덕션 레디로 제공된다.
Structured Streaming 첫걸음 — 배치를 스트리밍으로
· Chapter 3: A Tour of Spark's Toolset - Structured Streaming (pp.26-32)
Spark SQL 엔진 기반의 스트림 처리 엔진. 스트림을 계속 append되는 무한 테이블로 모델링하며 배치와 동일한 API를 사용한다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
TableProvider
Spark DataSource V2 API에서 카탈로그가 없는 데이터소스 커넥터의 기본 인터페이스. public 0-인자 생성자를 가져야 하며, 읽기·쓰기용 Table 객체를 반환하는 것이 핵심 책임이다.
DataSource V2 API — 커넥터들이 공통으로 올라서는 확장 아키텍처
· Apache Spark 공식문서 Data Source V2
TaskMemoryManager
executor 안에서 개별 태스크의 메모리 획득/해제/스필 요청을 중개하는 컴포넌트. 동시 실행 태스크 수에 따라 태스크별 메모리 몫을 유동적으로 조정한다.
Executor 내부 메모리 모델 — Unified Memory Manager와 페이지(세그먼트) 단위 할당
· 웹 리서치 종합 — Unified Memory Manager 구조, TaskMemoryManager/MemoryBlock 페이지 할당 메커니즘(japila.pl Spark Internals 기준)
TimestampType
Spark의 날짜+시간 타입. 초 단위까지만 정밀도를 지원하며, 그보다 세밀한 값은 강제 변환 시 제거된다.
날짜와 타임스탬프 다루기
· Chapter 6: Working with Dates and Timestamps 절 (PDF pp.105-111)
translate
두 문자열을 인덱스별로 1:1 매핑해 문자 단위 치환을 수행하는 함수. 정규식 없이 특정 문자들을 다른 문자로 바꿀 때 쓴다.
문자열과 정규표현식 다루기
· Chapter 6: Working with Strings, Regular Expressions 절 (PDF pp.96-105)
Trigger.AvailableNow()
Spark 3.3부터 제공되는 Structured Streaming 트리거. 현재 소스에 쌓인 데이터를 여러 마이크로배치로 나눠 처리한 뒤 자동 종료해, 스트리밍 코드를 배치처럼 실행할 수 있게 한다. 이전의 Trigger.Once() 대신 사용이 권장된다.
언제 Spark 배치, 언제 Structured Streaming인가 — 실무 판단 체크리스트
· Batch vs Stream Processing: The Plain-English Guide (2026) — freshness/failure handling/cost/output nature 및 When to Use 체크리스트 구간(7~10페이지)을 Spark 파이프라인 맥락으로 재구성
try_cast
일반 cast와 달리 변환에 실패해도 예외를 던지지 않고 NULL을 반환하는 캐스트 함수. 크래시를 막아주지만 실패한 값이 집계에서 조용히 제외되는 부작용이 있다.
ANSI 모드와 캐스트 에러 — 크래시와 조용한 데이터 손실 중 무엇을 고를 것인가
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "Eight rows out of 3,384 will kill the whole job" 구간 (8~10페이지)
UDF (User Defined Function)
사용자가 정의한 함수. PySpark 일반 UDF는 JVM↔Python 직렬화 오버헤드가 크며, Arrow 기반 pandas UDF가 더 효율적인 대안이다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
UDF (User-Defined Function)
사용자가 Python/Scala 등으로 작성해 등록하는 커스텀 변환 함수. 레코드(행) 단위로 실행되며 하나 이상의 컬럼을 입력받아 하나 이상의 컬럼을 반환한다.
JSON 다루기와 사용자 정의 함수(UDF)
· Chapter 6: Working with JSON, User-Defined Functions 절 (PDF pp.119-126)
unbounded table (무계 테이블)
Structured Streaming이 스트림 소스를 다루는 모델. 데이터가 계속 도착하는 테이블로 스트림을 취급하고, 배치용 DataFrame 연산을 그 테이블에 반복 적용한다.
배치와 스트림, 하나의 엔진으로 — Spark 관점에서 재구성한 처리 모델 비교
· Batch vs Stream Processing: The Plain-English Guide (2026) — 전체(1~7페이지, assumption/time semantics/computation model/state 구간)를 Spark 아키텍처 관점에서 재구성
Unified Memory Manager
Spark 1.6부터 도입된 메모리 관리자. Execution 메모리와 Storage 메모리 경계를 고정하지 않고 서로 빌려 쓸 수 있게 동적으로 관리한다.
Executor 내부 메모리 모델 — Unified Memory Manager와 페이지(세그먼트) 단위 할당
· 웹 리서치 종합 — Unified Memory Manager 구조, TaskMemoryManager/MemoryBlock 페이지 할당 메커니즘(japila.pl Spark Internals 기준)
union
스키마와 컬럼 수가 동일한 두 DataFrame을 이어 붙이는 연산. DataFrame이 불변이므로 행을 추가하는 유일한 방법이다.
행 필터링, 고유값, 샘플링, 합치기, 정렬
· Chapter 5: Filtering Rows, Getting Unique Rows, Random Samples/Splits, Concatenating and Appending Rows, Sorting Rows 절 (PDF pp.75-81)
Unresolved Logical Plan
사용자 코드를 그대로 옮긴 논리 계획으로, 참조하는 테이블·컬럼이 실제 존재하는지 아직 검증되지 않은 상태.
Structured API 실행 과정: 논리 계획에서 클러스터 실행까지
· Chapter 4: Overview of Structured API Execution - Logical Planning, Physical Planning, Execution 절 (PDF pp.51-53)
User Memory
Spark가 추적하지 않는 힙 영역. UDF 내부 객체, 사용자 정의 자료구조, Arrow 버퍼 등이 여기서 관리 없이 동작한다.
Executor 내부 메모리 모델 — Unified Memory Manager와 페이지(세그먼트) 단위 할당
· 웹 리서치 종합 — Unified Memory Manager 구조, TaskMemoryManager/MemoryBlock 페이지 할당 메커니즘(japila.pl Spark Internals 기준)
VACUUM
Delta 테이블에서 더 이상 참조되지 않으면서 보존 기간(기본 7일)보다 오래된 데이터 파일을 삭제하는 명령. 보존 기간을 너무 짧게 잡으면 동시 실행 중인 리더가 실패하거나 테이블이 손상될 수 있어 기본적으로 안전장치가 걸려 있다.
Delta Lake 유지보수 — OPTIMIZE/ZORDER로 압축·정렬, VACUUM으로 청소
· Delta Lake 공식 문서 Compaction and Z-Ordering, Utility commands
varargs
배열/리스트를 함수의 가변 인자로 풀어서 전달하는 언어 기능. Spark에서 동적 개수의 컬럼 표현식을 select에 넘길 때 활용한다.
문자열과 정규표현식 다루기
· Chapter 6: Working with Strings, Regular Expressions 절 (PDF pp.96-105)
VARIANT 타입
Spark 4.0에서 도입된 반정형 데이터용 타입. JSON을 적재 시점에 한 번만 파싱해 오프셋 기반 탐색이 가능한 이진 형식으로 저장하며, Parquet·Delta Lake와 공유하는 공개(open) 인코딩 명세를 따른다.
Spark 4.0 VARIANT 타입 — JSON을 매번 다시 파싱하지 않는다
· Databricks 공식 블로그 Introducing the Open Variant Data Type in Delta Lake and Apache Spark
VectorAssembler
여러 피처 컬럼을 하나의 Vector 컬럼으로 결합해 MLlib 알고리즘의 입력 형식에 맞추는 변환기.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
Vectorized Parquet Reader
행 단위가 아니라 여러 행을 컬럼 형태의 배치(ColumnBatch)로 묶어 컬럼별로 한꺼번에 디코딩하는 Spark의 Parquet 읽기 방식. spark.sql.parquet.enableVectorizedReader로 제어하며 기본 활성화돼 있다.
Vectorized Parquet Reader — 행 하나씩이 아니라 컬럼 배치 단위로 디코딩하기
· The Internals of Spark SQL — Vectorized Parquet Decoding
Whole-Stage Code Generation (WSCG)
여러 물리 연산자를 하나의 Java 함수로 코드 생성해 연산자 간 가상 함수 호출 오버헤드를 없애는 Spark SQL의 물리 실행 최적화. operator fusing이라고도 부른다.
Whole-Stage Code Generation — Volcano 모델을 깨고 여러 연산을 함수 하나로
· japila.pl Mastering Spark SQL — Whole-Stage Java Code Generation
wide dependency / 셔플(Shuffle)
입력 파티션들이 여러 출력 파티션에 걸쳐 기여하는 트랜스포메이션으로, 클러스터 전역에 걸쳐 파티션을 주고받는 셔플을 유발하며 결과가 디스크에 기록된다.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
Wide Transformation
자식 파티션 계산에 여러 부모 파티션 데이터가 필요해 셔플을 유발하는 트랜스포메이션(예: groupByKey, join).
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
withColumn
(컬럼명, 표현식) 두 인자를 받아 새 컬럼을 추가하거나 동일한 이름을 주면 기존 컬럼을 대체하는 DataFrame 메서드.
DataFrame 컬럼 조작: select/selectExpr, 리터럴, 추가·이름변경·제거·캐스팅
· Chapter 5: DataFrame Transformations - Creating DataFrames, Select & SelectExpr, Literals, Adding/Renaming/Removing Columns, Casting 절 (PDF pp.63-75)
계보(Lineage)
DataFrame에 적용된 트랜스포메이션들의 논리적 순서 기록. 동일 입력에 대해 임의 파티션을 재계산할 수 있게 해준다.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
드라이버 프로세스(Driver Process)
클러스터의 한 노드에서 애플리케이션 정보를 유지하고 사용자 프로그램에 응답하며, 익스큐터에 걸친 작업을 분석·분배·스케줄링하는 Spark 애플리케이션의 핵심 프로세스.
Spark 클러스터 아키텍처와 언어 API
· Chapter 2: A Gentle Introduction to Spark — Spark's Basic Architecture, Spark Applications, Spark's Language APIs (pp.3-7)
드라이버(Driver)
클러스터 정보를 유지하고 사용자 코드를 실행하는 Spark의 주체. collect/take/show 등은 결과를 드라이버로 가져온다.
결과 개수 제한, 파티셔닝(repartition/coalesce), 드라이버로 결과 수집
· Chapter 5: Limit, Repartition and Coalesce, Collecting Rows to the Driver 절 (PDF pp.81-84)
로컬 모드(Local Mode)
드라이버와 익스큐터가 클러스터가 아닌 한 대의 머신에서 스레드로 실행되는 Spark 실행 모드.
Spark 클러스터 아키텍처와 언어 API
· Chapter 2: A Gentle Introduction to Spark — Spark's Basic Architecture, Spark Applications, Spark's Language APIs (pp.3-7)
부분 합계(Partial Aggregation)
합산처럼 교환법칙이 성립하는 집계를 파티션 단위로 먼저 부분 계산(partial_sum)한 뒤 셔플을 거쳐 최종 합산하는 2단계 최적화 방식.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
상태 저장소(state store)
Structured Streaming이 마이크로배치 사이에 집계·조인 등 상태 기반 연산의 중간 결과를 이어가기 위해 체크포인트 위치에 유지하는 저장소.
배치와 스트림, 하나의 엔진으로 — Spark 관점에서 재구성한 처리 모델 비교
· Batch vs Stream Processing: The Plain-English Guide (2026) — 전체(1~7페이지, assumption/time semantics/computation model/state 구간)를 Spark 아키텍처 관점에서 재구성
셔플 블록 디커미셔닝
노드가 회수되기 전에 그 노드의 셔플 블록을 다른 노드로 미리 이관하는 기능. shuffleTracking과 달리 회수 자체를 늦추지 않고 데이터만 안전하게 옮겨둔다.
Spark on Kubernetes 배포 모델 — 드라이버/익스큐터 파드와 디커미셔닝
· Apache Spark 공식 문서 Running Spark on Kubernetes
스키마 추론(Schema Inference)
CSV처럼 완전한 정형 데이터가 아닌 소스를 읽을 때, Spark가 데이터 일부를 읽어 각 컬럼의 타입을 추측하는 기능.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
스키마(Schema)
DataFrame을 구성하는 컬럼 목록과 각 컬럼의 타입 정보.
SparkSession, DataFrame, 파티션
· Chapter 2: A Gentle Introduction to Spark — Starting Spark, SparkSession, DataFrames, Partitions (pp.7-9)
DataFrame의 컬럼명과 타입을 정의하는 메타데이터. 수동 정의하거나 schema-on-read로 데이터 소스에서 추론한다.
Structured API의 세 가지 얼굴: DataFrame, Dataset, SQL
· Chapter 4: Structured API Overview - 도입부, DataFrames and Datasets, Schemas 절 (PDF pp.44-47)
액션(Action)
트랜스포메이션 계획으로부터 실제 계산을 촉발시키는 연산. 콘솔 표시, 네이티브 객체 수집, 외부 소스 쓰기 세 종류가 있다.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
DAG 실행을 트리거해 잡(job)을 스테이지·태스크로 쪼개 클러스터에서 실제 계산을 수행시키는 연산.
Structured API의 세 가지 얼굴: DataFrame, Dataset, SQL
· Chapter 4: Structured API Overview - 도입부, DataFrames and Datasets, Schemas 절 (PDF pp.44-47)
워터마크 (Watermark)
이벤트 시간 기준 스트림 집계에서, 얼마나 늦게 도착하는 데이터까지 결과에 반영할지를 정하는 지연 임계값. withWatermark()로 지정한다.
상태 저장 스트림 처리와 워터마크 — 늦은 데이터는 어떻게 처리되는가
· Spark 공식 Structured Streaming Programming Guide — Watermarking 절
이벤트 타임(event time)
데이터 레코드 자체에 기록된 발생 시각. 데이터가 Spark에 도달해 처리되는 시각인 처리 시간(processing time)과 구분된다.
Structured Streaming 첫걸음 — 배치를 스트리밍으로
· Chapter 3: A Tour of Spark's Toolset - Structured Streaming (pp.26-32)
익스큐터(Executor)
드라이버가 할당한 코드를 실행하고 실행 상태를 드라이버에 보고하는 프로세스.
Spark 클러스터 아키텍처와 언어 API
· Chapter 2: A Gentle Introduction to Spark — Spark's Basic Architecture, Spark Applications, Spark's Language APIs (pp.3-7)
지연 평가(Lazy Evaluation)
트랜스포메이션을 즉시 실행하지 않고 계획으로 쌓아두었다가, 액션 호출 시점에 최적화된 물리 실행 계획으로 컴파일해 실행하는 Spark의 실행 방식.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
지연 평가와 Job 발생
트랜스포메이션은 Jobs 페이지에 아무 항목도 만들지 않고, count()·show()·collect() 같은 액션이 호출되어야 비로소 Job이 하나 생성되어 Jobs 페이지에 나타난다.
지연 평가는 실제로 Jobs 탭에 어떻게 찍히는가
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — Spark ignored your first five lines 구간, Jobs 페이지 스크린샷
클러스터 매니저(Cluster Manager)
물리 머신을 통제하고 Spark 애플리케이션에 자원을 배정하는 컴포넌트. Standalone, YARN, Mesos 등이 있다.
Spark 클러스터 아키텍처와 언어 API
· Chapter 2: A Gentle Introduction to Spark — Spark's Basic Architecture, Spark Applications, Spark's Language APIs (pp.3-7)
클러스터(Cluster)
여러 머신의 자원을 하나처럼 묶어 사용할 수 있게 하는 머신 그룹.
Spark 클러스터 아키텍처와 언어 API
· Chapter 2: A Gentle Introduction to Spark — Spark's Basic Architecture, Spark Applications, Spark's Language APIs (pp.3-7)
투기적 실행 (Speculative Execution)
느리게 진행 중인 태스크를 다른 executor에서 동시에 재실행해 먼저 끝나는 쪽 결과를 쓰는 기능. 데이터 스큐가 아닌 하드웨어성 스트래글러에 대응한다.
셔플·직렬화·압축·스케줄링 설정 총정리 — 실전 튜닝 체크리스트
· Spark 4.2.0 공식 문서 configuration.html — Serialization/Compression/Scheduling 설정 종합
트랜스포메이션(Transformation)
불변인 DataFrame을 원하는 형태로 바꾸는 방법을 지정하는 지시. 즉시 실행되지 않고 지연 평가된다.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
새 DataFrame/Dataset을 만들어내는 지연 평가 연산. 호출 즉시 실행되지 않고 DAG에 추가된다.
Structured API의 세 가지 얼굴: DataFrame, Dataset, SQL
· Chapter 4: Structured API Overview - 도입부, DataFrames and Datasets, Schemas 절 (PDF pp.44-47)
파티션 프루닝(partition pruning)
쿼리 필터 조건과 일치하지 않는 파티션 디렉터리를 아예 읽지 않고 건너뛰는 최적화. partitionBy로 저장한 컬럼을 필터할 때 적용된다.
partitionBy와 파티션 프루닝 — 어떤 컬럼을 파티션 키로 고를 것인가
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — "Write it out, then read it back like a stranger would" 구간 (24~26페이지)
파티션(Partition)
클러스터의 한 물리 머신에 위치한 로우들의 집합. 익스큐터들이 병렬로 작업할 수 있도록 데이터를 쪼갠 단위.
SparkSession, DataFrame, 파티션
· Chapter 2: A Gentle Introduction to Spark — Starting Spark, SparkSession, DataFrames, Partitions (pp.7-9)
페이지 (Page / MemoryBlock)
TaskMemoryManager가 관리하는 실제 최소 메모리 할당 단위. 정렬 버퍼나 해시 맵 같은 Tungsten 기반 구조가 이 단위로 메모리를 빌려 쓴다.
Executor 내부 메모리 모델 — Unified Memory Manager와 페이지(세그먼트) 단위 할당
· 웹 리서치 종합 — Unified Memory Manager 구조, TaskMemoryManager/MemoryBlock 페이지 할당 메커니즘(japila.pl Spark Internals 기준)
프리디킷 푸시다운(Predicate Pushdown)
지연 평가 최적화의 한 예로, 뒤쪽에 걸린 필터 조건을 원본 데이터 접근 시점까지 앞당겨 적용해 불필요한 데이터 읽기를 줄이는 기법.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
피어슨 상관계수(Pearson Correlation Coefficient)
두 숫자형 컬럼 사이의 선형 상관관계 정도를 나타내는 통계량. corr 함수 또는 df.stat.corr로 계산한다.
숫자 다루기: 산술 연산과 통계 함수
· Chapter 6: Working with Numbers 절 (PDF pp.91-96)
필터 평탄화(flatten)
여러 개의 순차적인 and 조건 필터를 Spark가 내부적으로 하나의 필터 문장으로 합쳐 한 번에 평가하는 최적화 동작.
표현식 API 지도와 불리언(Boolean) 다루기
· Chapter 6: Working with Different Types of Data - Chapter Overview, Where to Look for APIs, Working with Booleans 절 (PDF pp.85-91)