새소식

TIL

아파치 파켓(Apache Parquet)

  • -

아파치 파켓(Apache Parquet)은 열 기반의 고성능 파일 포맷으로, 빅데이터 처리를 위한 오픈소스 프로젝트 Apache Arrow에서 개발되었다. 하둡(Hadoop) 파일 시스템에서 사용하기 위해 최적화되어 있으며, Apache Spark, Apache Hive, Apache Impala 등의 데이터 처리 프레임워크와 호환된다. Parquet은 효율적인 데이터 압축 및 인코딩 방식을 사용해 데이터를 저장하며, 고속 쿼리 처리를 가능하게 한다.

Parquet의 주요 특징 및 장점은 다음과 같다.

  • 열(column) 기반 저장
    Parquet은 열 기반의 파일 포맷으로, 데이터를 열 단위로 저장한다. 이러한 방식은 대규모 데이터셋에서 작은 부분만 읽어야 하는 경우 유용하다. 예를 들어, 특정 열에 대한 집계 작업을 수행할 때, 필요한 열만 읽어서 처리할 수 있어 효율이 크게 향상된다.
  • 압축 및 인코딩
    Parquet은 데이터를 압축 및 인코딩하여 저장 공간을 절약한다. 열 기반 저장 방식으로 인해 동일한 데이터 타입의 값들이 인접해 있어, 압축률이 더 높아진다. 또한, 여러 가지 인코딩 기법을 사용해 데이터의 크기를 줄이고 저장 공간을 최적화한다.
  • 스키마 진화
    Parquet은 스키마 진화를 지원하여, 데이터 구조가 시간이 지남에 따라 변경되더라도 이전 파일과 호환성을 유지할 수 있다. 이를 통해 새로운 필드가 추가되거나 기존 필드가 삭제되어도 기존 데이터를 계속 사용할 수 있다.
  • 빠른 쿼리 처리
    Parquet은 열 기반 저장 및 압축률의 향상으로 인해 빠른 쿼리 처리를 지원한다. 예를 들어, Apache Spark 같은 분산 컴퓨팅 프레임워크에서 Parquet 파일을 사용하면, 필요한 데이터만 읽어 처리할 수 있어, 쿼리 처리 시간이 크게 단축된다.
  • 언어 및 플랫폼 독립성
    Parquet은 여러 프로그래밍 언어와 플랫폼에서 사용할 수 있다. 파이썬에서는 pandas와 함께 사용할 수 있는 pyarrow 라이브러리를 통해 Parquet 파일을 읽고 쓸 수 있으며, 자바, 스칼라, R 등 다른 프로그래밍 언어에서도 사용할 수 있는 라이브러리들이 제공된다. 이를 통해 데이터 처리 작업을 언어와 플랫폼에 구애받지 않고 유연하게 수행할 수 있다.

 

사용 사례

Parquet은 분석용 쿼리, 데이터 웨어하우스, 빅데이터 처리 작업 등에서 널리 사용된다. 특히, Apache Spark와 같은 분산 데이터 처리 프레임워크에서 Parquet 포맷이 선호되는 경우가 많다. 또한, 클라우드 기반 데이터 저장 서비스인 Amazon S3, Google Cloud Storage 등에서도 Parquet 파일 형식이 지원되어, 클라우드 환경에서의 데이터 처리 작업에도 활용된다.

파이썬에서는 pandas 라이브러리를 사용하여 Parquet 파일을 쉽게 다룰 수 있다.

pip install pyarrow
import pandas as pd

# 샘플 데이터 생성
data = {
    "col1": [1, 2, 3, 4],
    "col2": ["A", "B", "C", "D"],
    "col3": [1.1, 2.2, 3.3, 4.4],
}

df = pd.DataFrame(data)

# DataFrame을 Parquet 파일로 저장
parquet_file = "example.parquet"
df.to_parquet(parquet_file, engine="pyarrow")

# Parquet 파일을 DataFrame으로 불러오기
loaded_df = pd.read_parquet(parquet_file, engine="pyarrow")

print(loaded_df)

위 코드는 pandas DataFrame을 생성한 후, Parquet 파일로 저장하고, 다시 Parquet 파일을 불러와 DataFrame으로 변환하는 과정이다. 이렇게 하면 Parquet 포맷의 효율적인 데이터 저장 및 처리 기능을 파이썬에서도 활용할 수 있다.

 

그렇다고 무작정 Parquet을 사용하지 말고, 아래와 같은 조건일 때 사용하는 것이 적절하다.

  • 데이터셋의 크기가 수십 또는 수백 메가바이트 이상일 때
  • 데이터 처리 작업이 열 단위로 집계, 필터링 등의 작업을 수행하는 경우
  • 다양한 데이터 처리 플랫폼에서 호환되는 파일 포맷이 필요한 경우
  • 데이터 스키마가 시간이 지남에 따라 변경될 수 있는 경우
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.