5호03 / 05
Polars 2.0 — 스트리밍 엔진이 기본, 행 순서는 더 이상 보장 안 함
Polars가 10월 6일 2.0을 발표했습니다. 1.0이 API 안정화였다면 2.0은 실행 엔진 교체입니다.
핵심 변경
스트리밍 엔진이 기본. 1.x에서 옵션으로 켜던 스트리밍 엔진이 기본 실행 경로가 됐습니다. 메모리에 다 올리지 않고 청크 단위로 처리하므로, 메모리보다 큰 데이터가 기본으로 돌아갑니다(out-of-core).
행 순서를 보장하지 않습니다. 병렬 스트리밍의 대가입니다. group_by, join 등의 결과 순서가 실행마다 다를 수 있습니다. 이전과 같은 순서가 필요하면 **maintain_order=True**를 명시해야 하고, 그러면 느려집니다.
Map 타입. 키-값 쌍을 담는 데이터 타입이 추가됐습니다. Arrow의 Map과 대응됩니다.
더 엄격한 오류. 1.x에서 묵시적으로 캐스팅하거나 null로 넘어가던 연산 일부가 2.0에서는 오류를 냅니다. 의도된 변경이고, 조용히 틀린 결과를 내는 것보다 낫다는 판단입니다.
벤치마크
글은 DataFusion, DuckDB와 비교한 수치를 싣고 있습니다. 메모리보다 큰 데이터에서 Polars가 유리하다는 구성입니다. 벤치마크는 발표자가 고른 워크로드라는 점은 늘 같습니다. 자기 쿼리로 재는 것만 의미가 있습니다.
글에 없는 것
1.x의 지원 기간, 마이그레이션 도구의 유무는 글에 없습니다. 순서 비보장이 어떤 연산에 적용되고 어떤 연산은 여전히 순서를 유지하는지의 정확한 목록도 문서를 봐야 합니다.
실무에서 할 일
올리기 전에 할 일은 하나입니다. 결과 순서에 의존하는 코드를 찾는 것. .head()로 "첫 몇 개"를 보는 코드, 순서대로 파일에 쓰는 코드, 인덱스 위치로 행을 집는 코드가 전부 해당합니다. 테스트가 "같은 행 집합"이 아니라 "같은 순서"를 비교하고 있으면 2.0에서 불규칙하게 깨집니다. 정렬을 명시하거나 maintain_order=True를 주고, 그 비용을 측정하세요.
5호의 다른 글
요약으로 한 번에 보기 →- 01Deno 팀이 Cloudflare로 간다 — Deno 런타임은 1년 뒤 개발 종료, Deploy는 6개월 뒤 종료
- 02Python 3.15 — 지연 import, frozendict, UTF-8 기본, 그리고 JIT가 처음으로 빨라졌다
- 03Polars 2.0 — 스트리밍 엔진이 기본, 행 순서는 더 이상 보장 안 함지금 읽는 글
- 0410월 11일 DNS 루트 키 교체 — 2017년 이후 처음, 리졸버를 점검할 때
- 05Apple, macOS 전체 디스크 접근을 더 어렵게 만든다 — AI 에이전트를 명시
2026년 10월 6일에 올라온 글
그날 대시보드 →댓글
불러오는 중…