Polars 2.0: لماذا لم تعد عمليات الضم تحتفظ بترتيب صفوفها
يقوم Polars 2.0 بتشغيل collect على محرك دفق افتراضيًا.
يقوم Polars 2.0 بتشغيل collect على محرك دفق افتراضيًا. لعمليات join و group_by و unpivot، لم يعد الإصدار يضمن ترتيب صفوف الإدخال ما لم تقم بتعيين maintain_order أو sort بشكل صريح. في تجربتنا على polars 2.0.0، أعادت عملية ضم داخلي مكونة من 2,000,000 صف الصفوف خارج ترتيب الإدخال افتراضيًا واحتفظت بالترتيب مع تعيين maintain_order. يقوم الإصدار أيضًا بتشغيل تفريغ البيانات خارج الذاكرة ويجعل ادعاءات المقارنة المعيارية خاصة بالبائع.
اقرأ النسخة المكتوبة (الإنجليزية) ↗
ما يغطيه هذا الفيديو
- إن استدعاء ()collect على استعلام كسول يستخدم الآن محرك التدفق افتراضيًا، والذي لا يضمن ترتيب الصفوف لعمليات join و group_by و unpivot.
- يقول دليل الترحيل إن الترتيب لم يعد ترتيب ما قبل 2.0 وهو غير مضمون؛ ويوصي بفرز صريح إذا كنت تعتمد عليه.
- في تجربتنا، أعادت عملية ضم داخلي افتراضية إدخال ترتيب خاطئ False؛ أعاد maintain_order="left_right" على عملية الضم صحيح True. آلة واحدة، تشغيل واحد، شكل ضم واحد.
- تفريغ البيانات خارج الذاكرة قيد التشغيل افتراضيًا: يبدأ عند حوالي 80% من ذاكرة الوصول العشوائي (RAM)، بميزانية قرص افتراضية تبلغ 64 جيجابايت. عمليات الضم و group_by خارج الذاكرة قيد التطوير.
- يكشف collect_schema() عن عمود مفقود قبل قراءة أي بيانات، ولكن التحويل الذي يفشل على قيمة واحدة فقط يفشل عند collect().
- مقارنة TPC-H و TPC-DS هي تشغيل البائع الخاص على بيانات مشتقة، ويقول حاشيته إن النتائج غير قابلة للمقارنة مع المعايير الرسمية.
النص المترجم
مترجم من السرد الإنجليزي الأصلي. يتم التحكم في الصوت والتعليقات التوضيحية المتاحة بواسطة YouTube.
لماذا تغير الترتيب الافتراضي؟
0:00 تعتقد أن عملية الضم تعيد صفوفك بالترتيب الذي كتبتها به. توقف Polars 2.0 عن وعد ذلك، افتراضيًا، عن قصد. في هذا الفيديو: لماذا تغير الافتراضي؟ ماذا كسب؟ وأي من نصوصك البرمجية ستتوقف عن العمل أولاً؟ هذا هو The Daily Diff، تحت الغطاء. Polars هي مكتبة DataFrame مفتوحة المصدر: محرك جدول تستدعيه من Python،
0:20 مع كتابة جوهره بلغة Rust. إنها مجانية بموجب ترخيص MIT، وتثبتها باستخدام pip install polars. تفصيل واحد أولاً. المفتاح الذي يعيد الترتيب القديم هو وسيطة لعملية الضم نفسها. سأعود إليه في النهاية. منذ الإصدار 2.0، يقوم collect بتشغيل محرك التدفق افتراضيًا. يقوم التدفق بتقسيم الاستعلام إلى أجزاء تعمل بالتوازي، وتكتمل الأجزاء عندما تكتمل.
0:42 بالنسبة لعمليات join و group by و unpivot، لا يعد الإصدار بترتيب. من يتأثر أولاً؟ أي شخص يقارن الإخراج بملف محفوظ، صفًا بصف. يمكن أن ينجح هذا الاختبار على جهاز الكمبيوتر المحمول الخاص بك ويفشل على جهاز آخر. بعد ذلك، دليل الترحيل.
ماذا يعد دليل الترحيل؟
0:57 يقول إن ترتيب الصفوف الدقيق الموضح أعلاه غير مضمون. لذا إذا كنت تعتمد على الترتيب، فقم بالفرز بشكل صريح. التعامل مع البيانات خارج الذاكرة قيد التشغيل افتراضيًا أيضًا. يبدأ في التفريغ إلى القرص عند حوالي ثمانين بالمائة من ذاكرة الوصول العشوائي، بميزانية أربعة وستين جيجابايت. يمكن الآن لـ Sort، ووظائف النوافذ، والعديد من التعبيرات التفريغ. عمليات الضم و group-bys قادمة.
هل المعيار منافسة عادلة؟
1:17 تقول Polars إنها تتفوق على DataFusion و DuckDB في اختبارات TPC-H و TPC-DS المعيارية. الأرقام تأتي من تشغيلاتهم الخاصة، على بيانات مشتقة، وتقول حاشيتهم إنها غير قابلة للمقارنة بالنتائج الرسمية. تقول أرقامهم الخاصة إن Polars يصبح أسرع بحوالي 3.8 مرة من ستة عشر نواة إلى مائة واثنين وتسعين، على TPC-H. كما يقولون إن الخيوط الإضافية للآلة الكبيرة تبطئ الاستعلامات الصغيرة.
ماذا نرى عندما نشغله؟
1:41 قمنا بتشغيل نفس عملية الضم مرتين على Polars 2.0.0. التشغيل الافتراضي يخلط الصفوف. مع العلامة، يبقى ترتيب الإدخال. ابحث عن عمليات الضم التي تغذي اختبارًا. أي عملية ضم بدون فرز بعدها هي قرار ترتيب صفوف لم تتخذه قط. Polars 2.0 أكثر صرامة بشأن الأنواع.
هل الأشد صرامة يعني أبكر؟
1:58 يكشف فحص المخطط عن عمود مفقود قبل قراءة أي بيانات. لا يمكنه اكتشاف تحويل يفشل في صف واحد، لأن هذا الخطأ ينتظر البيانات. الآن الحلقة التي فتحتها.
كيف أعيد الترتيب القديم؟
2:08 المفتاح موجود في عملية الضم. عيّن maintain order على عملية الضم، أو أضف فرزًا بعدها. يقترح الدليل الفرز. حافظت علامة الضم على الترتيب في تجربتنا، مع الحفاظ على ترتيب الجانب الأيسر كـ يسار، يمين. الحكم، تحت الغطاء: NEEDS REVIEW.
ما هو الحكم؟
2:22 سأراجع كل عملية ضم قبل الترقية. لديك سؤال حول هذا؟ ضعه في التعليقات. وهذا هو الفرق لليوم. أنا نيكو من Axrisi. ادمج بمسؤولية.
المصادر
- 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



