Polars 2.0: tại sao các phép nối không còn giữ thứ tự hàng
Polars 2.0 chạy tập hợp trên một công cụ phát trực tuyến theo mặc định.
Polars 2.0 chạy tập hợp trên một công cụ phát trực tuyến theo mặc định. Đối với join, group_by và unpivot, bản phát hành không còn đảm bảo thứ tự hàng đầu vào trừ khi bạn đặt maintain_order hoặc sắp xếp rõ ràng. Trong quá trình chạy trên polars 2.0.0, một phép nối bên trong 2.000.000 hàng đã trả về các hàng không theo thứ tự đầu vào theo mặc định và giữ nguyên thứ tự với maintain_order được đặt. Bản phát hành cũng bật tính năng tràn ngoài lõi và đưa ra các tuyên bố về điểm chuẩn của chính nhà cung cấp.
Đọc phiên bản viết (tiếng Anh) ↗
Nội dung video này đề cập
- Việc gọi collect() trên một truy vấn lười biếng hiện sử dụng công cụ phát trực tuyến theo mặc định, không đảm bảo thứ tự hàng cho join, group_by và unpivot.
- Hướng dẫn di chuyển nói rằng thứ tự không còn là thứ tự trước 2.0 và không được đảm bảo; nó khuyến nghị sắp xếp rõ ràng nếu bạn dựa vào nó.
- Trong quá trình chạy của chúng tôi, một phép nối bên trong mặc định đã trả về thứ tự đầu vào False; maintain_order="left_right" trên phép nối đã trả về True. Một máy, một lần chạy, một hình dạng nối.
- Tràn ngoài lõi được bật theo mặc định: nó bắt đầu tràn ra đĩa ở khoảng 80% RAM, với ngân sách đĩa mặc định 64 GB. Nối và group_by ngoài lõi đang nằm trong lộ trình.
- collect_schema() bắt một cột bị thiếu trước khi bất kỳ dữ liệu nào được đọc, nhưng một chuyển đổi thất bại trên một giá trị chỉ thất bại ở collect().
- So sánh TPC-H và TPC-DS là của chính nhà cung cấp chạy trên dữ liệu phái sinh, và chú thích của họ nói rằng kết quả không thể so sánh với các điểm chuẩn chính thức.
Bản ghi đã dịch
Được dịch từ lời tường thuật tiếng Anh gốc. Âm thanh và phụ đề có sẵn được điều khiển bởi YouTube.
Tại sao thứ tự mặc định thay đổi?
0:00 Bạn nghĩ một phép nối trả lại các hàng của bạn theo thứ tự bạn đã viết chúng. Polars 2.0 đã ngừng hứa điều đó, theo mặc định, một cách cố ý. Trong video này: tại sao mặc định thay đổi? Nó đã mua gì? Và kịch bản nào của bạn bị hỏng đầu tiên? Đây là The Daily Diff, dưới mui xe. Polars là một thư viện DataFrame mã nguồn mở: một công cụ bảng bạn gọi từ Python,
0:20 với lõi của nó được viết bằng Rust. Nó miễn phí theo giấy phép MIT, và bạn cài đặt nó bằng pip install polars. Một chi tiết trước. Công tắc đưa thứ tự cũ trở lại là một đối số cho chính phép nối. Tôi sẽ quay lại nó vào cuối. Kể từ 2.0, collect chạy công cụ phát trực tuyến theo mặc định. Phát trực tuyến chia truy vấn thành các khối chạy song song, và các khối kết thúc khi chúng kết thúc.
0:42 Đối với join, group by và unpivot, bản phát hành không hứa hẹn một thứ tự. Ai bị ảnh hưởng đầu tiên? Bất cứ ai so sánh đầu ra với một tệp đã lưu, từng hàng một. Kiểm tra đó có thể vượt qua trên máy tính xách tay của bạn và thất bại trên một máy khác. Tiếp theo, hướng dẫn di chuyển.
Hướng dẫn di chuyển hứa hẹn điều gì?
0:57 Nó nói rằng thứ tự hàng chính xác được hiển thị ở trên không được đảm bảo. Vì vậy, nếu bạn dựa vào thứ tự, hãy sắp xếp rõ ràng. Ngoài lõi cũng được bật theo mặc định. Nó bắt đầu tràn ra đĩa ở khoảng tám mươi phần trăm RAM, với ngân sách sáu mươi bốn gigabyte. Sort, các hàm cửa sổ và nhiều biểu thức có thể tràn ra bây giờ. Joins và group-bys đang đến.
Điểm chuẩn có phải là một cuộc chiến công bằng không?
1:17 Polars nói rằng nó đánh bại DataFusion và DuckDB trên TPC-H và TPC-DS các điểm chuẩn. Các con số đến từ các lần chạy của riêng họ, trên dữ liệu phái sinh, và chú thích của họ nói rằng chúng không thể so sánh với kết quả chính thức. Các con số của riêng họ nói rằng Polars nhanh hơn khoảng ba phẩy tám lần từ mười sáu lõi đến một trăm chín mươi hai, trên TPC-H. Họ cũng nói rằng các luồng bổ sung của máy lớn làm chậm các truy vấn nhỏ.
Chúng ta thấy gì khi chạy nó?
1:41 Chúng tôi đã chạy cùng một phép nối hai lần trên Polars 2.0.0. Lần chạy mặc định xáo trộn các hàng. Với cờ, thứ tự đầu vào vẫn tồn tại. Tìm các phép nối cung cấp một bài kiểm tra. Bất kỳ phép nối nào không có sắp xếp sau đó là một quyết định về thứ tự hàng mà bạn chưa bao giờ thực hiện. Polars 2.0 nghiêm ngặt hơn về kiểu dữ liệu.
Nghiêm ngặt hơn có nghĩa là sớm hơn?
1:58 Kiểm tra schema bắt một cột bị thiếu trước khi bất kỳ dữ liệu nào được đọc. Nó không thể bắt một chuyển đổi thất bại trên một hàng, vì lỗi đó đợi dữ liệu. Bây giờ vòng lặp tôi đã mở.
Làm cách nào để lấy lại thứ tự cũ?
2:08 Công tắc nằm trên phép nối. Đặt maintain order trên phép nối, hoặc thêm một sắp xếp sau nó. Hướng dẫn đề xuất sắp xếp. Cờ nối đã giữ nguyên thứ tự trong lần chạy của chúng tôi, với thứ tự bên trái được giữ là trái, phải. Phán quyết, dưới mui xe: NEEDS REVIEW.
Phán quyết là gì?
2:22 Tôi sẽ xem xét mọi phép nối trước khi nâng cấp. Có một câu hỏi về điều này? Đặt nó trong phần bình luận. Và đó là sự khác biệt trong ngày hôm nay. Tôi là Niko từ Axrisi. Hợp nhất có trách nhiệm.
Nguồn
- Release of Polars 2.0Polars (pola.rs)
- Polars 2.0 upgrade guidePolars documentation
- Polars homepagePolars (pola.rs)
- polars-2.0-benchmark repositoryPolars on GitHub
- Release of Polars 2.0 (Hacker News discussion)Hacker News



