Spark SQL 데이터 소스

Spark SQL 데이터 소스 (Data Sources)

Spark SQL은 DataFrame 인터페이스를 통해 다양한 데이터 소스를 다룰 수 있어요. 관계형 변환으로 DataFrame을 연산하거나, 임시 뷰를 만들어 그 위에서 SQL을 실행하는 패턴이 기본이 됩니다. 어떤 소스를 언제 쓰면 좋은지 개요를 먼저 잡고, 이어지는 하위 페이지에서 각 소스의 세부 옵션을 파고들게 돼요.

출처: Apache Spark 공식 문서 – Data Sources

데이터 소스의 기본 개념

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) 구조로 반환.

각 소스의 상세 옵션과 사용법은 하위 페이지에서 포맷별로 따로 다룹니다. 트러블슈팅 항목은 별도의 페이지로 제공됩니다.

더 알아보기