पोलर्स 2.0: जॉइन अब अपनी पंक्ति क्रम को क्यों नहीं रखते
पोलर्स 2.0 डिफ़ॉल्ट रूप से स्ट्रीमिंग इंजन पर कलेक्ट चलाता है।
पोलर्स 2.0 डिफ़ॉल्ट रूप से स्ट्रीमिंग इंजन पर कलेक्ट चलाता है। जॉइन, ग्रुप-बाय और अनपिवट के लिए, रिलीज़ अब इनपुट पंक्ति क्रम की गारंटी नहीं देता है जब तक कि आप स्पष्ट रूप से मेंटेन_ऑर्डर या सॉर्ट सेट न करें। पोलर्स 2.0.0 पर हमारे रन में, 2,000,000-पंक्ति इनर जॉइन ने डिफ़ॉल्ट रूप से इनपुट क्रम से बाहर पंक्तियों को लौटाया और मेंटेन_ऑर्डर सेट के साथ क्रम को बनाए रखा। रिलीज़ आउट-ऑफ़-कोर स्पिलिंग को भी चालू करता है और बेंचमार्क दावों को विक्रेता के स्वयं के बनाता है।
लिखित संस्करण पढ़ें (अंग्रेजी) ↗
इस वीडियो में क्या शामिल है
- लेज़ी क्वेरी पर collect() को कॉल करने से अब डिफ़ॉल्ट रूप से स्ट्रीमिंग इंजन का उपयोग होता है, जो जॉइन, ग्रुप_बाय और अनपिवट के लिए पंक्ति क्रम की गारंटी नहीं देता है।
- माइग्रेशन गाइड का कहना है कि क्रम अब प्री-2.0 क्रम नहीं है और इसकी गारंटी नहीं है; यदि आप इस पर निर्भर करते हैं तो यह एक स्पष्ट सॉर्ट की सिफारिश करता है।
- हमारे रन में, एक डिफ़ॉल्ट इनर जॉइन ने इनपुट ऑर्डर फॉल्स लौटाया; जॉइन पर maintain_order="left_right" ने ट्रू लौटाया। एक मशीन, एक रन, एक जॉइन शेप।
- आउट-ऑफ़-कोर स्पिलिंग डिफ़ॉल्ट रूप से चालू है: यह RAM के लगभग 80% पर शुरू होता है, जिसमें 64 GB डिफ़ॉल्ट डिस्क बजट होता है। आउट-ऑफ़-कोर जॉइन और ग्रुप_बाय रोडमैप पर हैं।
- collect_schema() किसी भी डेटा को पढ़ने से पहले एक गुम कॉलम को पकड़ लेता है, लेकिन एक कास्ट जो केवल एक मान पर विफल होता है वह केवल collect() पर विफल होता है।
- TPC-H और TPC-DS तुलना व्युत्पन्न डेटा पर विक्रेता का अपना रन है, और इसके फुटनोट में कहा गया है कि परिणाम आधिकारिक बेंचमार्क के बराबर नहीं हैं।
अनुवादित प्रतिलेख
मूल अंग्रेजी कथन से अनुवादित। उपलब्ध ऑडियो और कैप्शन YouTube द्वारा नियंत्रित होते हैं।
डिफ़ॉल्ट क्रम क्यों बदल गया?
0:00 आपको लगता है कि एक जॉइन आपकी पंक्तियों को उसी क्रम में वापस कर देता है जिसमें आपने उन्हें लिखा था। पोलर्स 2.0 ने जानबूझकर, डिफ़ॉल्ट रूप से ऐसा वादा करना बंद कर दिया। इस वीडियो में: डिफ़ॉल्ट क्यों बदल गया? इससे क्या मिला? और आपकी कौन सी स्क्रिप्ट पहले टूटती है? यह द डेली डिफ है, हुड के नीचे। पोलर्स एक ओपन-सोर्स डेटाफ्रेम लाइब्रेरी है: एक टेबल इंजन जिसे आप पायथन से कॉल करते हैं,
0:20 जिसका कोर रस्ट में लिखा गया है। यह MIT लाइसेंस के तहत मुफ्त है, और आप इसे pip install polars के साथ स्थापित करते हैं। पहले एक विवरण। वह स्विच जो पुराने क्रम को वापस लाता है वह जॉइन का एक तर्क है। मैं अंत में इस पर वापस आऊंगा। 2.0 के बाद से, कलेक्ट डिफ़ॉल्ट रूप से स्ट्रीमिंग इंजन चलाता है। स्ट्रीमिंग क्वेरी को चंक्स में विभाजित करती है जो समानांतर में चलती हैं, और चंक्स तब समाप्त होते हैं जब वे समाप्त होते हैं।
0:42 जॉइन, ग्रुप बाय और अनपिवट के लिए, रिलीज़ एक क्रम का वादा नहीं करता है। सबसे पहले किसे मार पड़ती है? जो कोई भी आउटपुट की तुलना एक सहेजी गई फ़ाइल से करता है, पंक्ति दर पंक्ति। वह परीक्षण आपके लैपटॉप पर पास हो सकता है और एक अलग मशीन पर विफल हो सकता है। अगला, माइग्रेशन गाइड।
माइग्रेशन गाइड क्या वादा करता है?
0:57 यह कहता है कि ऊपर दिखाया गया सटीक पंक्ति क्रम की गारंटी नहीं है। तो यदि आप क्रम पर निर्भर करते हैं, तो स्पष्ट रूप से सॉर्ट करें। आउट-ऑफ़-कोर भी डिफ़ॉल्ट रूप से चालू है। यह RAM के लगभग अस्सी प्रतिशत पर डिस्क पर स्पिल करना शुरू कर देता है, चौंसठ गीगाबाइट बजट के साथ। सॉर्ट, विंडो फ़ंक्शन और कई एक्सप्रेशन अब स्पिल कर सकते हैं। जॉइन और ग्रुप-बाय आ रहे हैं।
क्या बेंचमार्क एक निष्पक्ष लड़ाई है?
1:17 पोलर्स का कहना है कि यह TPC-H और TPC-DS पर डेटाफ्यूजन और डकडीबी को हराता है बेंचमार्क। संख्याएं उनके अपने रन से आती हैं, व्युत्पन्न डेटा पर, और उनके फुटनोट में कहा गया है कि वे आधिकारिक परिणामों के बराबर नहीं हैं। उनकी अपनी संख्या कहती है कि TPC-H पर सोलह कोर से एक सौ बानवे तक पोलर्स लगभग तीन दशमलव आठ गुना तेज हो जाता है। वे यह भी कहते हैं कि बड़ी मशीन के अतिरिक्त थ्रेड छोटे प्रश्नों को धीमा कर देते हैं। उन्होंने यह भी कहा कि बड़ी मशीन के अतिरिक्त थ्रेड छोटी क्वेरी को धीमा कर देते हैं।
जब हम इसे चलाते हैं तो हमें क्या दिखता है?
1:41 हमने पोलर्स 2.0.0 पर उसी जॉइन को दो बार चलाया। डिफ़ॉल्ट रन पंक्तियों को शफ़ल करता है। फ़्लैग के साथ, इनपुट क्रम बच जाता है। उन जॉइन को खोजें जो एक परीक्षण को फ़ीड करते हैं। इसके बाद बिना सॉर्ट के कोई भी जॉइन एक पंक्ति क्रम का निर्णय है जो आपने कभी नहीं लिया। पोलर्स 2.0 प्रकारों के बारे में सख्त है।
क्या सख्त का मतलब पहले है?
1:58 स्कीमा चेक किसी भी डेटा को पढ़ने से पहले एक गुम कॉलम को पकड़ लेता है। यह एक कास्ट को नहीं पकड़ सकता है जो एक पंक्ति पर विफल रहता है, क्योंकि वह त्रुटि डेटा का इंतजार करती है। अब वह लूप जिसे मैंने खोला।
मुझे पुराना क्रम कैसे मिलेगा?
2:08 स्विच जॉइन पर रहता है। जॉइन पर मेंटेन ऑर्डर सेट करें, या इसके बाद एक सॉर्ट जोड़ें। गाइड सॉर्ट का सुझाव देता है। जॉइन फ़्लैग ने हमारे रन में क्रम को बनाए रखा, जिसमें बाईं ओर का क्रम बाएं, दाएं के रूप में रखा गया था। हुड के नीचे फैसला: समीक्षा की आवश्यकता है।
फैसला क्या है?
2:22 मैं अपग्रेड करने से पहले हर जॉइन की समीक्षा करूंगा। इसके बारे में कोई प्रश्न है? इसे टिप्पणियों में लिखें। और आज के लिए यही अंतर है। मैं ऐक्स्रिसी से निको हूँ। जिम्मेदारी से मर्ज करें।
स्रोत
- 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



