Polars 연동
Polars 연동 (Integration with Polars)
파이썬에서 DataFrame을 다루는 인기 라이브러리 Polars를 DuckDB와 함께 쓰고 싶다면, 이번 페이지가 그 연결 고리를 정리해 줍니다. DuckDB는 Polars DataFrame을 읽을 수도, 결과를 Polars DataFrame으로 돌려줄 수도 있어요.
출처: 공식문서
Polars는 Rust로 만들어진 DataFrames 라이브러리로, 파이썬과 Node.js 바인딩을 제공합니다. Apache Arrow의 컬럼형 형식(columnar format)을 메모리 모델로 사용하지요. DuckDB는 Polars DataFrame을 읽고, 쿼리 결과를 Polars DataFrame으로 변환할 수 있어요. 내부적으로는 효율적인 Apache Arrow 연동을 사용하며, pyarrow 라이브러리가 설치되어 있어야 동작합니다.
설치 (Installation)
pip install -U duckdb 'polars[pyarrow]'
Polars → DuckDB
DuckDB는 현재 스코프에 존재하는 Polars DataFrame 이름을 참조해 그 DataFrame을 네이티브하게 조회할 수 있어요.
import duckdb
import polars as pl
df = pl.DataFrame(
{
"A": [1, 2, 3, 4, 5],
"fruits": ["banana", "banana", "apple", "apple", "banana"],
"B": [5, 4, 3, 2, 1],
"cars": ["beetle", "audi", "beetle", "beetle", "beetle"],
}
)
duckdb.sql("SELECT * FROM df").show()
DuckDB → Polars
DuckDB는 .pl() 결과 변환 메서드로 결과를 Polars DataFrame으로 출력할 수 있어요.
df = duckdb.sql("""
SELECT 1 AS id, 'banana' AS fruit
UNION ALL
SELECT 2, 'apple'
UNION ALL
SELECT 3, 'mango'"""
).pl()
print(df)
shape: (3, 2)
┌─────┬────────┐
│ id ┆ fruit │
│ --- ┆ --- │
│ i32 ┆ str │
╞═════╪════════╡
│ 1 ┆ banana │
│ 2 ┆ apple │
│ 3 ┆ mango │
└─────┴────────┘
선택적인 lazy 파라미터를 쓰면 Polars LazyFrame을 반환받을 수도 있어요.
df = duckdb.sql("""
SELECT 1 AS id, 'banana' AS fruit
UNION ALL
SELECT 2, 'apple'
UNION ALL
SELECT 3, 'mango'"""
).pl(lazy=True)
print(df)
naive plan: (run LazyFrame.explain(optimized=True) to see the optimized plan)
PYTHON SCAN []
PROJECT */2 COLUMNS
이렇게 하면 .pl()로는 즉시 평가되는 DataFrame을, .pl(lazy=True)로는 지연 평가되는 LazyFrame을 얻을 수 있어요.
더 알아보기 (Learn more)
- Polars의 더 자세한 API는 Polars Python API Reference를 참고하세요.
- 파이썬 클라이언트 전반은 Python 클라이언트 문서에서 다룹니다.