brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Aug 03. 2023

Polars #01

#python #polars #rust #pyo3

Pola.rs 와 Pandas 를 사용해 성능 및 문법 비교를 기록.


Pola.rs 는 Rust 기반의 DataFrame 을 핸들링 할 수 있는 툴.


사용할 데이터는 뉴욕 택시 데이터를 활용.

https://ursalabs.org/arrow-r-nightly/articles/dataset.html


우선 데이터를 불러오는데

Pola.rs 는

pl_ds = pl.scan_parquet("./real_taxi_data.parquet")

이렇게 읽어오는데 해당 데이터는 Lazy 방식으로 읽을 수 있다.


Pandas 는

pd_ds = pd.read_parquet("./real_taxi_data.parquet")


이제 해당 데이터를 가지고

1. Groupby

2. Agg

3. Add new cols

4. Add new cols under if condition

5. Sort

6. Null value handling


순서로 로직을 구현해보고 어느 부분의 문법이 잘 읽히는지 확인해보면

>> Pola.rs

데이터를 불러오는 select 에서는 전체 컬럼을 가져오도록 지정했다.


>> Pandas

소요되는 시간 및 메모리 부분에서 모두 Pola.rs 가 좀 더 좋은 퍼포먼스를 보여주었다.


이정도로 Pola.rs 를 꼭! 사용해야 하는지 의문이 생길 수 있다.

하지만 실제 프로젝트에서 Python 로직을 Pola.rs 로 옮기고 Batch 작업을 진행했을 때

정말 상상도 못한 수준의 성능을 확인 할 수 있었다.


결국 GIL 을 극복할 수 있는 방법 >> C++, GOLANG, RUST 등의 언어로 가는것이 맞는건지...


Pola.rs 는 PyO3 를 통해서 Python 라이브러리로 만들어진 프로젝트 중 하나인데,

Pandas 의 약점을 잘 보완했다고 생각한다.


문법적인 부분에서는 PySpark 를 해보았다면 익숙해 보이는 방식의 Syntax 를 가지므로

특별히 러닝커브를 느끼지는 못했다.


https://pola-rs.github.io/polars-book/user-guide/

해당 사이트에서 API 를 탐색해 볼 수 있다.


하나씩 까부시면서 나도 놓치고 지나갔던 부분이 있는지 확인!

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari