Ускорение PyArrow Parquet до Pandas для фрейма данных с большим количеством строк

У меня есть DataFrame pandas, который я хочу часто запрашивать (в Ray через API). Я пытаюсь ускорить его загрузку, но требуется значительное время (3+ с), чтобы передать его в панд. Для большинства моих наборов данных это быстро, а вот этот - нет. Я предполагаю, что это потому, что 90% из них - струны.

[742461 rows x 248 columns]

Это примерно 137 МБ на диске. Чтобы исключить фактор скорости диска, я поместил файл .parq в точку монтирования tmpfs.

Сейчас попробовал:

  • Чтение паркета с помощью pyArrow Parquet (read_table), а затем преобразование его в pandas (чтение в таблицу выполняется немедленно, но использование to_pandas занимает 3 секунды)
  • Играя практически со всеми настройками to_pandas, которые я могу придумать в pyarrow / parquet
  • Чтение с помощью pd.from_parquet
  • Чтение его из хранилища памяти Plasma (https://arrow.apache.org/docs/python/plasma.html) и преобразование в панды. Опять же, чтение происходит немедленно, но to_pandas требует времени.
  • Преобразование всех строк в категории

У кого-нибудь есть хорошие советы о том, как ускорить преобразование панд при работе со строками? Ядров и баранов предостаточно.

Моим конечным результатом должен быть DataFrame pandas, поэтому я не привязан к формату файла parquet, хотя обычно он мой любимый.

С уважением, Никлас


person Niklas B    schedule 28.05.2020    source источник


Ответы (1)


В конце концов, я сократил время за счет более тщательной обработки данных, в основном за счет удаления пустых значений, убедившись, что у нас есть как можно больше значений NA (вместо пустых строк и т. Д.), И сделав категории для всех текстовых данных уникальными менее чем на 50%. содержание.

В итоге я создал схемы через PyArrow, чтобы я мог создавать категориальные значения с настраиваемым размером индекса (int64 вместо int16), чтобы мои категории могли содержать больше значений. В итоге размер данных был уменьшен на 50%.

person Niklas B    schedule 10.06.2020