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

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

Я бы попробовал сделать тот же анализ при помощи очень старого и очень доброго SQL. Если все данные в одной таблице то ClickHouse точно так же сработает за миллисекунды (на практике видел это на 4 TB данных). А если в запросе нужно совместить несколько таблиц, то я ожидаю что классический PostgreSQL сможет найти более эффективный план запроса и сделать join быстрее чем самый быстрый Rust но "в лоб".

Вот чуть более полный бенчмарк, где Polars сравнивают с ClickHouse https://h2oai.github.io/db-benchmark/. ClickHouse там оказывается в полтора раза медленнее, действительно. Однако тест проходит лишь на 50 GB данных, хотя даже для одного сервера Clickhouse это не ощутимая нагрузка, не говоря уже о кластере.

Наверно, если портировать какой-нибудь неплохой SQL движок на Rust, то будет совсем хорошо. Например https://surrealdb.com/ так делают, но с нуля (и пока что без оптимизации запросов)

Сколько строчек или мегабайт в flights-data?

Знаю, что как минимум Postres пытаются RIIRнуть. Ссылку я не дам.
Существует БД Noria, на расте, которая переплевывает стабильностью под нагрузкой какой-то там mysql и при помощи которую защитили докторскую.
Основная проблема с базами данных в основном в том, что надо данные доподготавливать (то бишь не просто file.open_csv/parquette/other16format()), а сами запросы потом не шибко человекочитаемые.

Лично бенчил вариант, когда кх сливал в скорости спарк.

Тем не менее это всего лишь библиотека. И пандасу она будет проигрывать в интеграциях, и на скорость там наплюют.

А Polars, как Pandas, без вариантов всё держит в оперативке, или как Spark, умеет работать с датафреймами, которые в оную не влезают? А то толку от той потрясающей скорости, если те данные, на которых разница на самом деле существенна, тупо не лезут в RAM...

Там же написано:


Hybrid Streaming (larger than RAM datasets)

Handles larger than RAM data
If you have data that does not fit into memory, polars lazy is able to process your query (or parts of your query) in a streaming fashion, this drastically reduces memory requirements so you might be able to process your 250GB dataset on your laptop. Collect with collect(streaming=True) to run the query streaming. (This might be a little slower, but it is still very fast!)

Спасибо, с ходу не нашёл. Тогда возьму на заметку, когда в следующий раз понадобится, в качестве альтернативы Spark'у.

Выглядит интересно, но, пока, не будут реализованы расширения наподобие geopandas, я с pandas никуда не перееду.

Немного "круглых" цифр по теме из практики офисного DS:

"Cырой бухгалтерский" 20 GB CSV-файл, после оптимизации в Pandas, превращает в один 20 MB файл-консерву PKL (сжатие 100:1) на диске примерно за 2 минуты, но в RAM с индексами он все равно займет 200 MB (сжатие 10:1). Запросы в Pandas, даже самые сложные, на нем работают мгновенно. Если же тут использовать SQL с файловой SQLite - запросы с индексами будут отрабатывать в тех же условиях за секунды, что терпимо, но воспринимается как "медленнее".

Если же данных становится в 5+ раз больше, то аналитику на условном десктопе с 16GB RAM в Pandas становится некомфортно (долго ждать и легко поймать memory error). Polars тут выручает, давая примерно те же ощущения, что и Pandas с в 3-5 раз меньшими данными. Однако непривычность методов и отсутствие индексов в Polars приводит к возврату данных в Pandas, ибо часто нужен решейпинг таблиц (а на индексах он дается легче).

но воспринимается как "медленнее".

оно же просто неудобнее, по факту. Это ж индексы готовить, запросы страшные писать.

Пробовал её недавно. Питон 3.10.

Создал словарь:

d = {'a': [1,2,3], 'b': [4, -5, 6]}

Создал датафрейм:

df = pl.DataFrame(d)

print(type(df))

print(df)

В этом случае код нормально работает. Но если одно значение изменяю на float, например 6.8, то тип по прежнему нормально печатается, а следующий print по тихому без всяких ошибок пропускается как pass и код завершает выполнение. Какой-то глюк.

Интересно, а есть ли для Polars что-то типа pandas-profile или чего-то еще для полуавтоматического EDA?

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

Публикации

Истории