욱 연구소

슬기로운 개발생활

프로그래밍/Spark

[pyspark] 스파크 완벽 가이드 - 파케이(parquet)파일

wook-lab 2022. 3. 16. 14:58
반응형

데이터 소스

스파크는 여섯 가지 핵심 데이터 소스와 커뮤니티에서 만든 수백 가지 외부 데이터 소스가 있다.

 

핵심 데이터 소스

  • CSV
  • JSON
  • 파케이
  • ORC
  • JDBC/ODBC 연결
  • 일반 텍스트 파일

 

외부 데이터 소스

  • 카산드라
  • HBase
  • 몽고디비
  • AWS Redshift (Amazon Redshift는 클라우드에서 완벽하게 관리되는 페타바이트급 데이터 웨어하우스 서비스입니다.)
  • XML
  • 기타 수많은 데이터소스

 

이중에서도 가장 먼저 알아두어야 할것은 스파크의 기본 파일 포맷인 파케이(parquet)이다.

 

파케이 파일

파케이란

다양한 스토리지 최적화 기술을 제공하는 오픈소스로 만들어진 컬럼 기반의 데이터 저장 방식

 

파케이 특징 및 장점

  • 분석 워크로드에 최적화
  • 저장소 공간 절약
  • 전체파일 대신 개별 컬럼을 읽을 수 있음
  • 컬럼 기반의 압축기능 제공
  • 스파크의 기본 파일 포맷
  • 읽기 연산 시 JSON이나 CSV보다 훨씬 효율적으로 동작
    (따라서 장기 저장용 데이터는 파케이 포맷으로 저장하는 것이 좋음)
  • 복합 데이터 타입을 지원
  • 컬럼이 배열, 맵, 구조체 타입이라 해도 문제없이 읽고 쓰기 가능
    (단, CSV에서는 배열을 사용할 수 없음)

 

파케이 파일 읽기

파케이를 읽기 포맷으로 지정하는 방법: spark.read.format("parquet")

파케이는 자체 스키마를 사용해 데이터를 저장하기 때문에 별도 옵션이 거의 없음(정확한 스키마가 필요한 경우에만 스키마를 설정)

파케이 파일은 스키마가 파일 자체에 내장되어 있으므로 추정이 필요 없음(이 방법이 더 효과적)

spark.read.format("parquet")\
    .load("/dat/flight-data/parquet/2010-summary.parquet").show(5)

 

파케이 옵션

읽기/쓰기 사용 가능한 값 기본 값 설명
ALL compression 또는 codec none, uncompressed, bzip2. deflate, gzip, lz4, snappy none 스파크가 파일을 읽고 쓸 때 사용하는 압축 코덱을 정의
READ mergeSchema true, false spark.sql.parquet.mergeSchema 속성의 설정 값 동일한 테이블이나 폴더에 신규 추가된 파케이 파일에 컬럼을 점진적으로 추가가능한데,
이러한 기능을 활성화하거나 비활성화 하기 위해 이 옵션을 사용
2개 옵션만 존재할 정도로 잘 만들어져 있지만 호환되지 않는 파케이 파일을 다룰 때 문제가 발생할 수 있음.

 

파케이 파일 쓰기

파일 경로만 명시하면 되며, 분할 규칙은 다른 포맷과 동일하게 적용

cvsFile.write.format("parquet").mode("overwrite")\
    save("/tmp/my-parquet-file.parquet")
반응형