approx_count_distinct
HyperLogLog 알고리즘 기반으로 컬럼의 고유값 개수를 근사 계산하는 함수. 정확한 countDistinct보다 훨씬 빠르다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
Learn · Glossary
총 116개 용어
HyperLogLog 알고리즘 기반으로 컬럼의 고유값 개수를 근사 계산하는 함수. 정확한 countDistinct보다 훨씬 빠르다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
지정한 허용오차(relError) 범위 내에서 근사 분위수를 계산하는 DataFrameStatFunctions 메서드. 정확한 계산보다 빠르게 근사값을 얻을 수 있다.
숫자 다루기: 산술 연산과 통계 함수
· Chapter 6: Working with Numbers 절 (PDF pp.91-96)
실행 중 통계를 반영해 셔플 파티션 병합, 스큐 조인 최적화, 조인 전략 변경 등을 자동으로 수행하는 Spark 3.0+ 기능. Spark 3.2부터 기본 활성화.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
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페이지)
읽기 전용 데이터를 각 노드에 캐시해두어 태스크마다 재전송하지 않도록 하는 변수. 작은 테이블과의 조인 셔플을 없애는 데 쓰인다.
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
테이블을 조인/집계 키의 해시값 기준으로 고정된 수의 버킷(파일)에 미리 나누어 저장하는 기법. 조인 시 셔플을 줄인다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
DataFrame의 계산 결과를 메모리에 저장해 이후 동일 DataFrame을 재사용할 때 재계산을 피하게 하는 메서드.
Dataset과 캐싱 — 타입 안전 API와 반복 접근 최적화
· Chapter 3: A Tour of Spark's Toolset - 개요, Datasets, Caching Data for Faster Access (pp.22-26)
컬럼의 값을 다른 Spark 타입으로 변환하는 연산.
DataFrame 컬럼 조작: select/selectExpr, 리터럴, 추가·이름변경·제거·캐스팅
· Chapter 5: DataFrame Transformations - Creating DataFrames, Select & SelectExpr, Literals, Adding/Renaming/Removing Columns, Casting 절 (PDF pp.63-75)
Spark가 유지하는 모든 테이블·DataFrame 메타데이터 저장소. analyzer가 컬럼/테이블을 resolve할 때 참조한다.
Structured API 실행 과정: 논리 계획에서 클러스터 실행까지
· Chapter 4: Overview of Structured API Execution - Logical Planning, Physical Planning, Execution 절 (PDF pp.51-53)
Spark 내부에서 쿼리 계획·최적화·실행을 담당하는 엔진. 언어와 무관하게 자체 타입 정보를 유지한다.
Catalyst 타입 시스템: untyped DataFrame vs typed Dataset
· Chapter 4: Overview of Structured Spark Types - Catalyst, DataFrame/Dataset 타입 차이, Columns, Rows 절 (PDF pp.45-47)
Spark SQL의 쿼리 최적화 엔진. Analysis→Logical Optimization→Physical Planning→Code Generation 4단계로 동작한다.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
RDD 상태를 안정적 스토리지에 저장하며 lineage를 완전히 제거하는 메커니즘. 긴 lineage로 인한 재계산 비용·스택 오버플로를 방지한다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
Driver가 제출 호스트에서 실행되면 Client Mode, 클러스터 내부 워커 노드에서 실행되면 Cluster Mode. 프로덕션은 Cluster Mode가 표준이다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
Driver의 리소스 요청을 받아 Executor를 실제로 실행시키는 계층. Standalone/YARN/Kubernetes가 현재 실무 표준이며 Mesos는 deprecated 되었다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
전체 셔플 없이 기존 파티션들을 합쳐 파티션 수를 줄이는 연산.
결과 개수 제한, 파티셔닝(repartition/coalesce), 드라이버로 결과 수집
· Chapter 5: Limit, Repartition and Coalesce, Collecting Rows to the Driver 절 (PDF pp.81-84)
여러 물리적 실행 전략(예: 조인 방식) 중 테이블·파티션 크기 등 물리적 속성을 근거로 최적안을 고르는 데 쓰이는 비교 모델.
Structured API 실행 과정: 논리 계획에서 클러스터 실행까지
· Chapter 4: Overview of Structured API Execution - Logical Planning, Physical Planning, Execution 절 (PDF pp.51-53)
Directed Acyclic Graph. Spark가 호출된 트랜스포메이션들을 기록해두는, 방향이 있고 순환하지 않는 실행 계획 그래프.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
특정 파티션에 데이터가 편중되어 일부 태스크만 비정상적으로 오래 걸리는 현상.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
행과 열, 스키마를 가진 표 형태의 분산 데이터 컬렉션. 한 머신이 아니라 클러스터 전체에 걸쳐 존재할 수 있다.
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)
스키마 타입 일치 여부를 런타임에만 검사하는 구조화 컬렉션. 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)
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)
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)
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)
컴파일 타임에 타입을 검사하는 구조화 컬렉션. 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)
하나 이상의 컬럼 값 기준으로 중복 행을 제거해 새 DataFrame을 반환하는 트랜스포메이션.
행 필터링, 고유값, 샘플링, 합치기, 정렬
· Chapter 5: Filtering Rows, Getting Unique Rows, Random Samples/Splits, Concatenating and Appending Rows, Sorting Rows 절 (PDF pp.75-81)
사용자 코드의 main()이 실행되며 DAG 생성·스테이지/태스크 분할·스케줄링·결과 수집을 담당하는 Spark 애플리케이션의 중심 프로세스.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
지정한 컬럼 조합이 같은 행을 중복으로 간주해 제거하는 메서드. 인자를 생략하면 전체 컬럼이 완전히 같은 행만 중복으로 판단한다.
대소문자 정규화와 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페이지)
워크로드에 따라 Executor 수를 자동으로 늘리거나 줄이는 Spark 기능.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
워커 노드에서 실행되며 Driver가 할당한 태스크를 처리하고 데이터를 메모리/디스크에 저장하는 프로세스.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
DataFrame의 트랜스포메이션 계보를 위(최종 결과)에서 아래(원천 데이터) 순으로 보여주는 실행 계획. explain()으로 확인한다.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
배열이나 맵을 담은 컬럼을 원소 단위로 행을 펼치는 함수. 배열은 원소 개수만큼 행이 늘어나고, 맵은 key/value 두 컬럼으로 펼쳐진다.
null 다루기와 복합 타입(구조체·배열·맵)
· Chapter 6: Working with Nulls in Data, Working with Complex Types 절 (PDF pp.111-119)
문자열로 표현된 컬럼 참조나 트랜스포메이션을 파싱해 Column 표현식으로 만들어주는 함수. col()보다 유연하며 SQL과 동일한 논리 트리로 컴파일된다.
DataFrame 스키마 정의와 컬럼·표현식
· Chapter 5: Basic Structured Operations - Schemas, Columns and Expressions, Records and Rows 절 (PDF pp.54-63)
to_json은 StructType 컬럼을 JSON 문자열로 직렬화하고, from_json은 지정한 스키마에 맞춰 JSON 문자열을 다시 구조화된 컬럼으로 역직렬화한다.
JSON 다루기와 사용자 정의 함수(UDF)
· Chapter 6: Working with JSON, User-Defined Functions 절 (PDF pp.119-126)
JSON 문자열 컬럼에서 값을 조회하는 함수. get_json_object는 JSON 경로 표현식으로 임의 깊이를 조회하고, json_tuple은 한 단계만 중첩된 JSON에서 여러 키를 동시에 꺼낸다.
JSON 다루기와 사용자 정의 함수(UDF)
· Chapter 6: Working with JSON, User-Defined Functions 절 (PDF pp.119-126)
Spark의 Structured API 위에서 그래프(정점·엣지) 분석을 손쉽게 할 수 있게 하는 패키지. GraphX를 기반으로 한다.
Spark 패키지 생태계와 GraphFrames
· Chapter 3: A Tour of Spark's Toolset - Spark's Ecosystem and Packages, GraphFrames (pp.38-43)
Spark의 원조 그래프 분석 라이브러리로, GraphFrames가 이 위에 구축되어 PageRank 등 내장 알고리즘을 제공받는다.
Spark 패키지 생태계와 GraphFrames
· Chapter 3: A Tour of Spark's Toolset - Spark's Ecosystem and Packages, GraphFrames (pp.38-43)
RDD의 키 기반 셔플 연산에서 기본으로 사용되는 파티셔닝 전략. 키의 해시값을 기준으로 레코드를 파티션에 분배한다.
70개 질문 블로그로 보는 추가 확인 사항 — 파티셔너와 튜닝 체크리스트
· 70 Spark Interview Questions for Data Engineers (전체 50문항 + FAQ)
캐싱된 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페이지)
Java 직렬화보다 빠르고 컴팩트한 직렬화 라이브러리. 최고 성능을 위해 커스텀 클래스 등록이 권장된다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
오른쪽 테이블에 매칭되는 키가 없는 왼쪽 테이블의 행만 반환하는 조인 방식. 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페이지)
RDD를 만들어낸 일련의 트랜스포메이션 기록. 파티션 유실 시 이 기록을 따라 원본부터 재계산해 복구한다.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
프로그래밍 언어의 상수 값을 Spark가 이해하는 리터럴 표현식으로 변환하는 함수.
DataFrame 컬럼 조작: select/selectExpr, 리터럴, 추가·이름변경·제거·캐스팅
· Chapter 5: DataFrame Transformations - Creating DataFrames, Select & SelectExpr, Literals, Adding/Renaming/Removing Columns, Casting 절 (PDF pp.63-75)
SparkSession의 마스터 URL 설정 중 하나로, 드라이버와 익스큐터를 한 프로세스 안에서 실행하며 머신이 가진 모든 코어를 사용하는 로컬 실행 모드.
로컬 Spark 세션과 파티션의 실체 — 코어 개수가 아니라 파티션 개수가 병렬성을 정한다
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — Setup, SparkSession, Partitions (문서 상단부)
스트리밍 읽기 시 한 트리거마다 읽어들일 최대 파일 수를 제한하는 옵션. 데모에서 스트리밍 유입을 흉내 낼 때 쓰이며 실제 운영에서는 보통 생략한다.
Structured Streaming 첫걸음 — 배치를 스트리밍으로
· Chapter 3: A Tour of Spark's Toolset - Structured Streaming (pp.26-32)
전처리, 모델 학습, 예측을 대규모 데이터에서 수행할 수 있게 하는 Spark의 내장 머신러닝 라이브러리.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
DataFrame의 null 처리 전용 API(DataFrameNaFunctions). drop/fill/replace 세 가지 주요 동작을 제공한다.
null 다루기와 복합 타입(구조체·배열·맵)
· Chapter 6: Working with Nulls in Data, Working with Complex Types 절 (PDF pp.111-119)
각 입력 파티션이 오직 하나의 출력 파티션에만 기여하는 트랜스포메이션(예: where/filter). 파이프라이닝으로 메모리 내에서 처리된다.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
부모 파티션 하나가 자식 파티션 하나에만 대응되어 셔플 없이 처리되는 트랜스포메이션(예: map, filter).
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
정수 인덱스로 표현된 카테고리를 카테고리별 boolean 컬럼으로 펼쳐 잘못된 서열 관계를 제거하는 변환기.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
스트리밍 쿼리 결과를 sink에 어떻게 반영할지 지정하는 옵션. complete는 매 트리거마다 전체 결과를 다시 쓴다.
Structured Streaming 첫걸음 — 배치를 스트리밍으로
· Chapter 3: A Tour of Spark's Toolset - Structured Streaming (pp.26-32)
노드가 받는 링크(엣지)의 수와 질을 근거로 그래프 내 노드의 상대적 중요도를 추정하는 알고리즘.
Spark 패키지 생태계와 GraphFrames
· Chapter 3: A Tour of Spark's Toolset - Spark's Ecosystem and Packages, GraphFrames (pp.38-43)
cache()보다 유연하게 메모리·디스크 등 다양한 저장 레벨을 지정해 데이터를 저장하는 메서드. 데이터가 메모리 용량을 초과할 때 사용한다.
Dataset과 캐싱 — 타입 안전 API와 반복 접근 최적화
· Chapter 3: A Tour of Spark's Toolset - 개요, Datasets, Caching Data for Faster Access (pp.22-26)
여러 변환기·추정기 단계를 순서대로 묶어 fit/transform을 일관되게 재사용할 수 있게 하는 MLlib 구성 요소.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
필터 조건을 데이터 소스 스캔 단계로 내려보내 불필요한 I/O를 줄이는 최적화.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
Off-heap 메모리 관리와 Whole-Stage Code Generation으로 Spark의 CPU/메모리 효율을 높이는 프로젝트.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
정합성 검증에 실패한 레코드를 삭제하지 않고 별도로 적재해 두는 테이블. 원인 추적과 재처리를 위해 사용한다.
대소문자 정규화와 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페이지)
불변이며 파티션 단위로 클러스터에 분산된 Spark의 기본 데이터 구조. lineage를 통해 장애 시 재계산으로 복구된다.
Spark 핵심 아키텍처 (Driver/Executor/DAG/RDD)
· spark_ref_01.md Q1-10 (Core Concepts & Architecture)
DataFrame·Dataset·SQL 테이블과 함께 Spark가 제공하는 핵심 분산 데이터 추상화 중 하나로, 파티션을 더 낮은 수준에서 직접 다룰 수 있는 인터페이스.
SparkSession, DataFrame, 파티션
· Chapter 2: A Gentle Introduction to Spark — Starting Spark, SparkSession, DataFrames, Partitions (pp.7-9)
groupBy 호출 직후 얻는 중간 결과 타입. 그루핑 정보만 지정된 상태로, 집계 함수를 추가 지정해야 조회 가능한 DataFrame이 된다.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
항상 전체 셔플을 일으켜 지정한 파티션 수·기준 컬럼으로 데이터를 재분배하는 연산.
결과 개수 제한, 파티셔닝(repartition/coalesce), 드라이버로 결과 수집
· Chapter 5: Limit, Repartition and Coalesce, Collecting Rows to the Driver 절 (PDF pp.81-84)
Spark의 내부 최적화 인메모리 포맷을 나타내는 타입. 모든 언어에서 DataFrame의 레코드로 쓰이며, 물리적 바이트 배열을 표현한다.
Catalyst 타입 시스템: untyped DataFrame vs typed Dataset
· Chapter 4: Overview of Structured Spark Types - Catalyst, DataFrame/Dataset 타입 차이, Columns, Rows 절 (PDF pp.45-47)
조인 키에 무작위 접두사를 붙여 스큐된 키를 여러 파티션으로 분산시키는 기법.
성능 튜닝과 최적화 (스큐·셔플·Catalyst·Tungsten)
· spark_ref_01.md Q21-30 (Performance Tuning & Optimization) + FAQ(파티셔닝/브로드캐스트 조인/성능 최적화/cache·persist/데이터 스큐) 종합, 수치 오류 정정 포함
스키마를 미리 정의하지 않고 데이터 소스를 읽을 때 자동으로 타입을 추론하는 방식.
DataFrame 스키마 정의와 컬럼·표현식
· Chapter 5: Basic Structured Operations - Schemas, Columns and Expressions, Records and Rows 절 (PDF pp.54-63)
데이터를 파티션 간 재분배하는 과정. 직렬화·디스크 I/O·네트워크 전송을 수반해 Spark에서 가장 비용이 큰 연산이다.
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
Java의 날짜/시간 포맷 표준. Spark의 unix_timestamp 등에서 비표준 날짜 문자열을 파싱할 때 지정하는 포맷 패턴(예: yyyy-dd-MM)의 기준이 된다.
날짜와 타임스탬프 다루기
· Chapter 6: Working with Dates and Timestamps 절 (PDF pp.105-111)
작은 파일이 과도하게 많이 쌓여, 파일마다 붙는 메타데이터·오픈 비용 때문에 쿼리 성능이 저하되는 문제. 잦은 적재 주기와 과도한 셔플 파티션 수가 주요 원인이다.
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페이지)
조인 키로 양쪽 테이블을 셔플·정렬한 뒤 병합하는 대용량 테이블 조인 전략. 사전 버킷팅+정렬로 셔플/정렬을 생략할 수 있다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
전체 데이터를 셔플해 정렬하는 대신 각 파티션 내부에서만 정렬을 수행하는 최적화용 메서드.
행 필터링, 고유값, 샘플링, 합치기, 정렬
· Chapter 5: Filtering Rows, Getting Unique Rows, Random Samples/Splits, Concatenating and Appending Rows, Sorting Rows 절 (PDF pp.75-81)
커뮤니티가 spark-packages.org 등에 배포하는 Spark 확장 라이브러리 생태계. 특정 도메인·기능에 최적화된 Spark 활용을 제공한다.
Spark 패키지 생태계와 GraphFrames
· Chapter 3: A Tour of Spark's Toolset - Spark's Ecosystem and Packages, GraphFrames (pp.38-43)
드라이버 프로세스가 노출하는 내장 모니터링 도구. Jobs/Stages/SQL 탭 등에서 실행 계획과 실제 처리량을 확인할 수 있다.
로컬 Spark 세션과 파티션의 실체 — 코어 개수가 아니라 파티션 개수가 병렬성을 정한다
· PySpark Tutorial: Build a Real Pipeline and Read the Spark UI — Setup, SparkSession, Partitions (문서 상단부)
인터랙티브 콘솔 없이 미리 작성된 사용자 코드를 하나의 독립된 애플리케이션으로 클러스터에 제출·실행하는 방식.
SparkSession, DataFrame, 파티션
· Chapter 2: A Gentle Introduction to Spark — Starting Spark, SparkSession, DataFrames, Partitions (pp.7-9)
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페이지)
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페이지)
드라이버 프로세스가 사용자에게 드러나는 형태로, 사용자 정의 조작을 클러스터 전역에 실행시키는 진입점. 인터랙티브 콘솔에서는 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)
비정상적으로 느린 태스크를 감지해 다른 노드에서 복제 실행하고, 먼저 끝난 결과를 채택하는 메커니즘. 기본값은 비활성(false)이다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
셔플 경계를 기준으로 나뉜 Job의 물리적 실행 단위. 파티션 수만큼의 Task로 다시 나뉜다.
운영과 배포 (클러스터 매니저·장애 복구·직렬화)
· spark_ref_01.md Q31-40 (Operations & Deployment)
문자열 카테고리 컬럼을 정수 인덱스로 변환하는 MLlib 전처리 변환기.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
여러 컬럼을 하나로 묶어 중첩된 DataFrame처럼 다루는 복합 타입. dot 문법(col.field)으로 내부 필드에 접근한다.
null 다루기와 복합 타입(구조체·배열·맵)
· Chapter 6: Working with Nulls in Data, Working with Complex Types 절 (PDF pp.111-119)
스키마를 구성하는 개별 필드. 이름, 데이터 타입, nullable 여부(기본값 true)를 갖는다.
DataFrame 스키마 정의와 컬럼·표현식
· Chapter 5: Basic Structured Operations - Schemas, Columns and Expressions, Records and Rows 절 (PDF pp.54-63)
DataFrame의 스키마를 나타내는 타입. 여러 StructField의 시퀀스로 구성되며 동일한 이름의 필드는 허용되지 않는다.
DataFrame 스키마 정의와 컬럼·표현식
· Chapter 5: Basic Structured Operations - Schemas, Columns and Expressions, Records and Rows 절 (PDF pp.54-63)
배치 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)
Spark의 날짜+시간 타입. 초 단위까지만 정밀도를 지원하며, 그보다 세밀한 값은 강제 변환 시 제거된다.
날짜와 타임스탬프 다루기
· Chapter 6: Working with Dates and Timestamps 절 (PDF pp.105-111)
두 문자열을 인덱스별로 1:1 매핑해 문자 단위 치환을 수행하는 함수. 정규식 없이 특정 문자들을 다른 문자로 바꿀 때 쓴다.
문자열과 정규표현식 다루기
· Chapter 6: Working with Strings, Regular Expressions 절 (PDF pp.96-105)
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 파이프라인 맥락으로 재구성
일반 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페이지)
사용자가 정의한 함수. PySpark 일반 UDF는 JVM↔Python 직렬화 오버헤드가 크며, Arrow 기반 pandas UDF가 더 효율적인 대안이다.
실전 코딩 시나리오 (조인·UDF·파티셔닝)
· spark_ref_01.md Q41-50 (Advanced Scenarios & Coding Logic)
사용자가 Python/Scala 등으로 작성해 등록하는 커스텀 변환 함수. 레코드(행) 단위로 실행되며 하나 이상의 컬럼을 입력받아 하나 이상의 컬럼을 반환한다.
JSON 다루기와 사용자 정의 함수(UDF)
· Chapter 6: Working with JSON, User-Defined Functions 절 (PDF pp.119-126)
Structured Streaming이 스트림 소스를 다루는 모델. 데이터가 계속 도착하는 테이블로 스트림을 취급하고, 배치용 DataFrame 연산을 그 테이블에 반복 적용한다.
배치와 스트림, 하나의 엔진으로 — Spark 관점에서 재구성한 처리 모델 비교
· Batch vs Stream Processing: The Plain-English Guide (2026) — 전체(1~7페이지, assumption/time semantics/computation model/state 구간)를 Spark 아키텍처 관점에서 재구성
스키마와 컬럼 수가 동일한 두 DataFrame을 이어 붙이는 연산. DataFrame이 불변이므로 행을 추가하는 유일한 방법이다.
행 필터링, 고유값, 샘플링, 합치기, 정렬
· Chapter 5: Filtering Rows, Getting Unique Rows, Random Samples/Splits, Concatenating and Appending Rows, Sorting Rows 절 (PDF pp.75-81)
사용자 코드를 그대로 옮긴 논리 계획으로, 참조하는 테이블·컬럼이 실제 존재하는지 아직 검증되지 않은 상태.
Structured API 실행 과정: 논리 계획에서 클러스터 실행까지
· Chapter 4: Overview of Structured API Execution - Logical Planning, Physical Planning, Execution 절 (PDF pp.51-53)
배열/리스트를 함수의 가변 인자로 풀어서 전달하는 언어 기능. Spark에서 동적 개수의 컬럼 표현식을 select에 넘길 때 활용한다.
문자열과 정규표현식 다루기
· Chapter 6: Working with Strings, Regular Expressions 절 (PDF pp.96-105)
여러 피처 컬럼을 하나의 Vector 컬럼으로 결합해 MLlib 알고리즘의 입력 형식에 맞추는 변환기.
MLlib로 배우는 Spark 머신러닝 파이프라인
· Chapter 3: A Tour of Spark's Toolset - Machine Learning and Advanced Analytics (pp.32-38)
입력 파티션들이 여러 출력 파티션에 걸쳐 기여하는 트랜스포메이션으로, 클러스터 전역에 걸쳐 파티션을 주고받는 셔플을 유발하며 결과가 디스크에 기록된다.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
자식 파티션 계산에 여러 부모 파티션 데이터가 필요해 셔플을 유발하는 트랜스포메이션(예: groupByKey, join).
RDD·DataFrame·Dataset와 데이터 처리
· spark_ref_01.md Q11-20 (Data Structures & APIs)
(컬럼명, 표현식) 두 인자를 받아 새 컬럼을 추가하거나 동일한 이름을 주면 기존 컬럼을 대체하는 DataFrame 메서드.
DataFrame 컬럼 조작: select/selectExpr, 리터럴, 추가·이름변경·제거·캐스팅
· Chapter 5: DataFrame Transformations - Creating DataFrames, Select & SelectExpr, Literals, Adding/Renaming/Removing Columns, Casting 절 (PDF pp.63-75)
DataFrame에 적용된 트랜스포메이션들의 논리적 순서 기록. 동일 입력에 대해 임의 파티션을 재계산할 수 있게 해준다.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
클러스터의 한 노드에서 애플리케이션 정보를 유지하고 사용자 프로그램에 응답하며, 익스큐터에 걸친 작업을 분석·분배·스케줄링하는 Spark 애플리케이션의 핵심 프로세스.
Spark 클러스터 아키텍처와 언어 API
· Chapter 2: A Gentle Introduction to Spark — Spark's Basic Architecture, Spark Applications, Spark's Language APIs (pp.3-7)
클러스터 정보를 유지하고 사용자 코드를 실행하는 Spark의 주체. collect/take/show 등은 결과를 드라이버로 가져온다.
결과 개수 제한, 파티셔닝(repartition/coalesce), 드라이버로 결과 수집
· Chapter 5: Limit, Repartition and Coalesce, Collecting Rows to the Driver 절 (PDF pp.81-84)
드라이버와 익스큐터가 클러스터가 아닌 한 대의 머신에서 스레드로 실행되는 Spark 실행 모드.
Spark 클러스터 아키텍처와 언어 API
· Chapter 2: A Gentle Introduction to Spark — Spark's Basic Architecture, Spark Applications, Spark's Language APIs (pp.3-7)
합산처럼 교환법칙이 성립하는 집계를 파티션 단위로 먼저 부분 계산(partial_sum)한 뒤 셔플을 거쳐 최종 합산하는 2단계 최적화 방식.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
Structured Streaming이 마이크로배치 사이에 집계·조인 등 상태 기반 연산의 중간 결과를 이어가기 위해 체크포인트 위치에 유지하는 저장소.
배치와 스트림, 하나의 엔진으로 — Spark 관점에서 재구성한 처리 모델 비교
· Batch vs Stream Processing: The Plain-English Guide (2026) — 전체(1~7페이지, assumption/time semantics/computation model/state 구간)를 Spark 아키텍처 관점에서 재구성
CSV처럼 완전한 정형 데이터가 아닌 소스를 읽을 때, Spark가 데이터 일부를 읽어 각 컬럼의 타입을 추측하는 기능.
End-to-End 예제로 보는 실행 계획 (항공편 데이터)
· Chapter 2: A Gentle Introduction to Spark — An End to End Example, DataFrames and SQL (pp.12-21)
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)
트랜스포메이션 계획으로부터 실제 계산을 촉발시키는 연산. 콘솔 표시, 네이티브 객체 수집, 외부 소스 쓰기 세 종류가 있다.
트랜스포메이션, 지연 평가, 액션과 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)
데이터 레코드 자체에 기록된 발생 시각. 데이터가 Spark에 도달해 처리되는 시각인 처리 시간(processing time)과 구분된다.
Structured Streaming 첫걸음 — 배치를 스트리밍으로
· Chapter 3: A Tour of Spark's Toolset - Structured Streaming (pp.26-32)
드라이버가 할당한 코드를 실행하고 실행 상태를 드라이버에 보고하는 프로세스.
Spark 클러스터 아키텍처와 언어 API
· Chapter 2: A Gentle Introduction to Spark — Spark's Basic Architecture, Spark Applications, Spark's Language APIs (pp.3-7)
트랜스포메이션을 즉시 실행하지 않고 계획으로 쌓아두었다가, 액션 호출 시점에 최적화된 물리 실행 계획으로 컴파일해 실행하는 Spark의 실행 방식.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
트랜스포메이션은 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 페이지 스크린샷
물리 머신을 통제하고 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)
여러 머신의 자원을 하나처럼 묶어 사용할 수 있게 하는 머신 그룹.
Spark 클러스터 아키텍처와 언어 API
· Chapter 2: A Gentle Introduction to Spark — Spark's Basic Architecture, Spark Applications, Spark's Language APIs (pp.3-7)
불변인 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)
쿼리 필터 조건과 일치하지 않는 파티션 디렉터리를 아예 읽지 않고 건너뛰는 최적화. 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페이지)
클러스터의 한 물리 머신에 위치한 로우들의 집합. 익스큐터들이 병렬로 작업할 수 있도록 데이터를 쪼갠 단위.
SparkSession, DataFrame, 파티션
· Chapter 2: A Gentle Introduction to Spark — Starting Spark, SparkSession, DataFrames, Partitions (pp.7-9)
지연 평가 최적화의 한 예로, 뒤쪽에 걸린 필터 조건을 원본 데이터 접근 시점까지 앞당겨 적용해 불필요한 데이터 읽기를 줄이는 기법.
트랜스포메이션, 지연 평가, 액션과 Spark UI
· Chapter 2: A Gentle Introduction to Spark — Transformations, Lazy Evaluation, Actions, Spark UI (pp.9-11)
두 숫자형 컬럼 사이의 선형 상관관계 정도를 나타내는 통계량. corr 함수 또는 df.stat.corr로 계산한다.
숫자 다루기: 산술 연산과 통계 함수
· Chapter 6: Working with Numbers 절 (PDF pp.91-96)
여러 개의 순차적인 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)