Polars 2.0: чаму аб'яднанні больш не захоўваюць парадак радкоў
Polars 2.0 па змаўчанні запускае збор на струменным рухавіку.
Polars 2.0 па змаўчанні запускае збор на струменным рухавіку. Для аб'яднанняў (join), груповак (group_by) і пераўтварэнняў (unpivot) новая версія больш не гарантуе парадку радкоў на ўваходзе, калі вы відавочна не ўсталюеце maintain_order або sort. У нашым выкананні на polars 2.0.0, унутранае аб'яднанне з 2 000 000 радкоў па змаўчанні вяртала радкі не па парадку ўводу і захоўвала парадак з усталяваным maintain_order. Версія таксама ўключае выгрузку дадзеных з памяці на дыск (out-of-core spilling) і робіць заяўленыя пастаўшчыком параўнальныя тэсты ўласнымі.
Чытаць пісьмовае выданне (англійская) ↗
Што ахоплівае гэта відэа
- Выклік collect() у лянівым запыце зараз па змаўчанні выкарыстоўвае струменны рухавік, які не гарантуе парадку радкоў для join, group_by і unpivot.
- Кіраўніцтва па міграцыі кажа, што парадак больш не з'яўляецца парадкам да 2.0 і не гарантуецца; яно рэкамендуе відавочную сартаванне, калі вы на яго спадзяецеся.
- У нашым выкананні, унутранае аб'яднанне па змаўчанні вяртала парадак уводу False; maintain_order="left_right" для аб'яднання вяртала True. Адна машына, адно выкананне, адна форма аб'яднання.
- Выгрузка дадзеных з памяці на дыск уключана па змаўчанні: яна пачынаецца пры прыблізна 80 % АЗП, з бюджэтам дыска па змаўчанні 64 ГБ. Выгрузка з памяці на дыск для join і 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 Яно кажа, што дакладны парадак радкоў, паказаны вышэй, не гарантуецца. Такім чынам, калі вы спадзяецеся на парадак, сартуйце відавочна. Выгрузка дадзеных з памяці на дыск таксама ўключана па змаўчанні. Яна пачынае выгрузку на дыск пры прыблізна васьмідзесяці працэнтах АЗП, з бюджэтам у шэсцьдзесят чатыры гігабайты. Сартаванне, аконныя функцыі і многія выразы могуць зараз выгружацца. Аб'яднанні і групоўкі з'явяцца ў будучыні.
Ці з'яўляецца бенчмарк справядлівым?
1:17 Polars сцвярджае, што ён пераўзыходзіць DataFusion і DuckDB у тэстах TPC-H і TPC-DS бенчмарках. Лічбы ўзяты з іх уласных запускаў, на вытворных дадзеных, і іх зноска кажа, што яны не параўнальныя з афіцыйнымі вынікамі. Іх уласныя лічбы кажуць, што Polars становіцца прыблізна ў тры цэлых восем дзясятых разоў хутчэй ад шаснаццаці ядраў да ста дзевяноста двух, на TPC-H. Яны таксама кажуць, што дадатковыя патокі вялікай машыны запавольваюць невялікія запыты.
Што мы бачым, калі запускаем яго?
1:41 Мы запусцілі тое ж самае аб'яднанне двойчы на Polars 2.0.0. Выкананне па змаўчанні перамяшала радкі. З флагам парадак уводу захаваўся. Знайдзіце аб'яднанні, якія падаюць дадзеныя для тэсту. Любое аб'яднанне без наступнага сартавання - гэта рашэнне аб парадку радкоў, якое вы ніколі не прымалі. Polars 2.0 больш строгі ў адносінах да тыпаў.
Ці азначае строжэйшы - ранейшы?
1:58 Праверка схемы ловіць адсутны слупок да таго, як будуць прачытаны дадзеныя. Яна не можа злавіць пераўтварэнне тыпу, якое не працуе для аднаго радка, таму што гэтая памылка чакае дадзеных. Цяпер завеса, якую я адкрыў.
Як вярнуць стары парадак?
2:08 Пераключальнік знаходзіцца ў аб'яднанні. Усталюйце maintain order для аб'яднання або дадайце сартаванне пасля яго. Кіраўніцтва прапануе сартаванне. Флаг аб'яднання захаваў парадак у нашым выкананні, прычым парадак левага боку захаваўся як злева, справа. Вердыкт, пад капотам: NEEDS REVIEW.
Які вердыкт?
2:22 Я б перагледзеў кожнае аб'яднанне перад абнаўленнем. Ёсць пытанні наконт гэтага? Пакіньце іх у каментарах. І гэта ўвесь diff на сёння. Я Ніка з 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



