#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 를 탐색해 볼 수 있다.
하나씩 까부시면서 나도 놓치고 지나갔던 부분이 있는지 확인!