Как стать автором
Обновить

Комментарии 12

У Polars есть один большой плюс, важный в больщих системах. У неё НЕТ ЗАВИСИМОСТЕЙ!

Сложных системах, где используется много разных инструментов для датасаенса, начинается цирк с коням, так как очень многие зависять от numpy определённых версий.

Другими словами, если вы хотите использовать новыю версию библиотеки, может понадобиться апгрейдить практически все зависимости в системе.

Алексей, расскажите, пожалуйста, что вы имеете в виду, когда пишите "Архитектура базируется на NumPy — это ограничивает обработку больших массивов данных, помещающихся в память одного потока."

Rust позволяет эффективно управлять памятью и гарантирует отсутствие состояния гонки. - это просто общие слова, которые не имеют отношения к делу.

Если вы противопостовляете pandas + Dask и polars, надо говорить не про "Polars же написан на Rust — языке программирования, который славится своей безопасностью и высокой производительностью." - а про наличие streaming API из коробки (которое появилось не само по себе).

А вот чтобы было более честное сравнение - "Данные хранятся в колонках, так что чтение и обработка становятся более эффективными." - вы не пробовали те же тесты запустить в pandas если выбрано PyArrow в качестве сравнения? Сюда же и про mmap - оно ведь тоже не на равном месте появляется. Попробуйте так же работать с CSV или XLSX форматами :)

Что касается API, то у Polars свой собственный DataFrame API (иммутабельный, в отличие от Pandas), а еще есть поддержка SQL. У DuckDB — только SQL. А DuckDB то каким образом к pandas относится?

А в абзаце про слияние и join у вас написано про фильтрацию.

В целом вы могли бы и лучше, но явно халтурите.

Спасибо, перед проф деформация, пропустил не ту мысль. Убрал лишнее

Попробуйте так же работать с CSV или XLSX форматами :)

А что не так с .csv в Polars? Читает .csv файлы он в 3 раза быстрее.

Ещё у Поларса есть очень удобная фича, что не нужно загружать весь файл в память - можно с помощью метода scan отфильтровать тот кусок, который нужен для работы, что сильно экономит память в случае каких-то больших датасетов.

Все так с .csv - у них хороший парсер для csv - отсюда и результат. Т.е. дело не только в том что они используют mmap, но и в том что остальной код лучше.

Вот у вас есть реальный опыт pandas/polars, судя по вашим комментариям он гораздо интереснее статьи.

Получается что polars луче сравнивать со spark, а не pandas?

Я не знаю как вам, но, если техлид делает бенчмаркинг и сравнивает результаты по 1 запуску, то для меня это показатель полного непрофессионализма.

Предоставьте свои бенчмарки, с удовольствием сошлюсь на них.

+, к тому же лучше использовать time.perf_counter() вместо time.time()

Насколько я знаю, в Polars медленнее работает изменение существующего дотасета (скажем, новую строчку добавить).

Polars в десятки раз быстрее.

Датасет ~17.5 млн строк. Pandas:

df_1.iloc[-1] = ...
# 557 μs ± 2.4 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)

pd.concat([df, pd.Dataframe({})])
# 331 ms ± 7.77 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Polars:

pl.concat([df, pl.Dataframe({})])
# 44.2 μs ± 497 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)

df.vstack(pl.Dataframe({}))
# 10.6 μs ± 177 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий