apache/datafusion-python

Apache DataFusion Python Bindings

이 프로젝트가 무엇인가

DataFusion Python은 Python 프로그래머에게 DataFusion에 대한 액세스를 제공하는 라이브러리입니다. DataFusion은 Apache Arrow 데이터와 함께 작동하는 Rust로 작성된 빠른 인메모리 쿼리 엔진입니다. 자체 데이터 처리 로직을 작성하는 대신 SQL 또는 DataFrame 스타일 호출을 사용하고 DataFusion이 무거운 작업을 처리하도록 할 수 있습니다. 이것은 "바인딩"(Python과 Rust 엔진 간의 브리지)이기 때문에 다른 데이터 도구의 구성 요소로 자주 사용됩니다. README에는 Dask SQL, DataFusion Ballista, DataFusion Ray가 이를 기반으로 하는 프로젝트로 나열되어 있습니다.

무엇을 할 수 있게 해주는가

README에 따르면 주요 기능은 다음과 같습니다:

  • CSV, Parquet, JSON 파일에 대해 SQL 쿼리 또는 DataFrame API를 실행합니다.
  • 쿼리는 DataFusion의 내장 쿼리 최적화기에 의해 자동으로 최적화됩니다.
  • SQL 쿼리 내에서 사용자 정의 Python 함수를 실행합니다.
  • Pandas 및 PyArrow를 지원하는 다른 DataFrame 라이브러리와 데이터를 교환합니다.
  • Substrait 형식(쿼리 계획을 나타내는 표준 방법)으로 쿼리 계획을 직렬화 및 역직렬화합니다.
  • Polars, Pandas, cuDF에 대한 SQL을 DataFrame 호출로 트랜스파일하는 실험적 지원.

README는 또한 CPU 사용률을 최대화하기 위해 병렬 처리를 조정하는 가이드를 가리키지만 여기서는 세부 사항을 설명하지 않습니다.

구체적인 예(README에서)

README에는 NYC 택시 여행 데이터의 Parquet 파일을 쿼리하고, 승객 수별로 여행을 집계하고, 결과를 Pandas DataFrame으로 변환하고, 막대 차트를 저장하는 작은 스크립트가 나와 있습니다:

from datafusion import SessionContext

ctx = SessionContext()
ctx.register_parquet('taxi', 'yellow_tripdata_2021-01.parquet')

df = ctx.sql("select passenger_count, count(*) "
             "from taxi "
             "where passenger_count is not null "
             "group by passenger_count "
             "order by passenger_count")

pandas_df = df.to_pandas()
fig = pandas_df.plot(kind="bar", title="Trip Count by Number of Passengers").get_figure()
fig.savefig('chart.png')

또 다른 예는 DataFrame을 뷰로 등록하여 SQL로 쿼리하는 방법을 보여줍니다. 컨텍스트를 만들고, Python 사전에서 DataFrame을 구축하고, 필터링하고, register_view로 등록한 다음 뷰에 대해 SQL을 실행하고 결과를 수집합니다.

구성

README는 컨텍스트를 만들 때 런타임 설정(메모리, 디스크)과 세션 설정을 조정할 수 있음을 보여줍니다. 예로는 기본 카탈로그 및 스키마 설정, 사용할 파티션 수 제어, 재파티션 조인 또는 Parquet 프루닝과 같은 옵션 전환이 있습니다. 컨텍스트를 인쇄하여 현재 구성을 확인할 수 있습니다.

설치 방법

세 가지 방법이 나열되어 있습니다:

  • uv: uv add datafusion
  • Pip: pip install datafusion (또는 python -m pip install datafusion)
  • Conda: conda install -c conda-forge datafusion

import datafusion를 실행하고 datafusion.__version__을 확인하여 설치를 확인할 수 있습니다.

AI 코딩 어시스턴트와 함께 사용하기

이 프로젝트에는 AI 코딩 어시스턴트에게 관용적인 DataFusion Python 작성 방법을 가르치는 스킬 파일이 포함되어 있습니다. npx skills add apache/datafusion-python으로 설치하거나 프로젝트의 AGENTS.md / CLAUDE.md에 참조 줄을 수동으로 붙여넣을 수 있습니다.

개발 설정(기여자용)

README는 uv 또는 pip를 사용하고 Rust와 cargo를 설치하여 개발 환경을 설정하는 방법을 설명합니다. maturin(Rust에서 Python 패키지를 빌드하는 도구)을 사용합니다. protobuf 지원을 위해 Protobuf 또는 cmake를 설치해야 합니다. 테스트 데이터는 git 서브모듈에서 가져옵니다. 이 프로젝트는 또한 다음을 제공합니다:

  • pre-commit 훅 린팅용(선택 사항이지만 권장; docker와 cmake 필요)
  • Python 및 Rust 린터를 실행하기 위한 스크립트(ci/scripts 디렉토리)
  • 업스트림 커버리지 확인 스킬 — 업스트림 Apache DataFusion Rust 라이브러리의 어떤 기능이 아직 이러한 Python 바인딩에 노출되지 않았는지 감사하는 데 도움이 됩니다. 스칼라 함수, 집계 함수, 창 함수, DataFrame, 세션 컨텍스트, FFI 유형 또는 모두를 한 번에 확인하도록 요청할 수 있습니다.

여기서 다루지 않는 것

이 설명은 README에만 기반하므로 명시된 것 이상의 기능을 만들지 않았습니다. 더 깊은 문서는 README가 온라인 API 문서와 examples 폴더를 가리킵니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트