Spark SQL 데이터 소스
Spark SQL 데이터 소스 (Data Sources)
Spark SQL은 DataFrame 인터페이스를 통해 다양한 데이터 소스를 다룰 수 있어요. 관계형 변환으로 DataFrame을 연산하거나, 임시 뷰를 만들어 그 위에서 SQL을 실행하는 패턴이 기본이 됩니다. 어떤 소스를 언제 쓰면 좋은지 개요를 먼저 잡고, 이어지는 하위 페이지에서 각 소스의 세부 옵션을 파고들게 돼요.
데이터 소스의 기본 개념
Spark SQL은 DataFrame을 로드/저장하는 일반적인 방법과, 내장 데이터 소스별로 제공되는 특정 옵션을 함께 다룹니다. DataFrame을 만들고 임시 뷰로 등록하면 그 데이터 위에 SQL 쿼리를 실행할 수 있다는 게 핵심 구조예요.
일반 로드/세이브 함수 (Generic Load/Save Functions)
spark.read로 데이터를 읽고 df.write로 저장하는 일반 함수가 모든 포맷에 공통 적용돼요. 포맷은 format()으로 지정하고, 경로는 load()/save()로 넘깁니다.
df = spark.read.format("json").load("examples/src/main/resources/people.json")
df.select("name", "age").write.format("parquet").save("namesAndAges.parquet")
포맷을 지정하지 않으면 기본값으로 Parquet가 사용됩니다.
- 수동 옵션 지정 (Manually Specifying Options):
option("key", "value")로 특정 데이터 소스의 옵션을 직접 넘길 수 있어요. - 파일에서 직접 SQL 실행 (Run SQL on files directly):
spark.sql("SELECT ... FROM parquet.경로")처럼 소스 포맷을 붙여 파일 위에 바로 SQL을 실행할 수 있어요. - 세이브 모드 (Save Modes):
mode()는 저장 시 기존 데이터가 있을 때 동작을 정합니다 —errorifexists(기본),append,overwrite,ignore. - 영구 테이블에 저장 (Saving to Persistent Tables):
saveAsTable()로 저장하면 데이터가 카탈로그에 남는 영구 테이블이 돼요. - 버케팅·정렬·파티셔닝 (Bucketing, Sorting and Partitioning):
bucketBy(),sortBy(),partitionBy()로 저장 시에도 물리적 구성을 제어할 수 있어요.
일반 파일 소스 옵션 (Generic File Source Options)
파일 기반 소스에 공통으로 적용되는 옵션들이 있어요.
- 손상 파일 무시 (Ignore Corrupt Files):
ignoreCorruptFiles=true로 읽다 만난 손상 파일을 무시 - 누락 파일 무시 (Ignore Missing Files):
ignoreMissingFiles=true로 존재하지 않는 파일을 무시 - 경로 글로브 필터 (Path Glob Filter):
pathGlobFilter로 읽을 파일을 패턴으로 걸러냄 - 재귀 파일 탐색 (Recursive File Lookup):
recursiveFileLookup=true로 하위 디렉터리까지 재귀 탐색
내장 데이터 소스 목록
Spark SQL이 기본 제공하는 데이터 소스는 다음과 같아요.
- Parquet 파일: 칼럼 기반 스토리지로 Spark의 기본 파일 포맷. 프로그래밍 방식 로드, 파티션 발견(partition discovery), 스키마 병합(schema merging), Hive metastore Parquet 테이블 변환, 그리고 세부 설정을 제공합니다.
- ORC 파일: Hive 생태계와 잘 어울리는 칼럼 기반 스토리지.
- JSON 파일: 반구조화 데이터를 다룰 때 유용.
- CSV 파일:
header,sep같은 파싱 옵션을 가진 범용 텍스트 포맷. - Text 파일: 줄 단위 텍스트를 다루는 단순 포맷.
- XML 파일: XML 문서를 파싱해 DataFrame으로.
- Hive 테이블: Hive metastore와 연동. Hive 테이블의 저장 포맷 지정, 다른 버전의 Hive metastore와의 상호 작용을 다룹니다.
- JDBC (다른 DB): 관계형 데이터베이스에 연결해 읽고 쓰기.
url,dbtable같은 옵션을 사용합니다. - Avro 파일:
to_avro()/from_avro()함수와 Databricks spark-avro와의 호환성 포함. - Protobuf 데이터:
to_protobuf()/from_protobuf()함수로 Protocol Buffers 직렬화 지원. - 전체 바이너리 파일 (Whole Binary Files):
binaryFile포맷으로 이미지 같은 바이너리 파일을 통째로 읽어 (path, modificationTime, length, content) 구조로 반환.
각 소스의 상세 옵션과 사용법은 하위 페이지에서 포맷별로 따로 다룹니다. 트러블슈팅 항목은 별도의 페이지로 제공됩니다.