Является ли pyarrow.Table хорошим для долгосрочного хранения панд DataFrames? - PullRequest
0 голосов
/ 11 июня 2019

Попытка придумать решение для быстрой сериализации и длительного хранения данных Pandas.Содержимое фрейма данных является табличным, но предоставляется пользователем, может быть произвольным, поэтому могут быть как полностью текстовые столбцы, так и полностью числовые / логические столбцы.

Основные цели:

  • Сериализациядатафрейм как можно быстрее, чтобы выгрузить его на диск.

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

  • Ну, наименьший объем памяти, занимаемый сериализацией и компактным выходным файлом.

Проведены тесты сравнения различных методов сериализации, в том числе:

  • Паркет: df.to_parquet()
  • Перо: df.to_feather()
  • JSON: df.to_json()
  • CSV: df.to_csv()
  • PyArrow: pyarrow.default_serialization_context().serialize(df)
  • PyArrow.Table: pyarrow.default_serialization_context().serialize(pyarrow.Table.from_pandas(df))

Скорость сериализации и объем памяти при этом, вероятно, являются главными факторами (читайте: избавьтесь от данных, сбросьте их на диск как можно скорее).

Как ни странно, в наших тестах сериализация pyarrow.Table кажется наиболее сбалансированной и довольно быстрой.

Вопросы:

  1. Есть ли что-то, чего мне не хватает в понимании разницы между сериализацией данных напрямую с использованием PyArrow и сериализацией pyarrow.Table, таблица светит, если кадры данных в основном состоят из строк, которыев наших случаях это часто случается.

  2. Является ли pyarrow.Table допустимым параметром для длительного хранения данных?Кажется, «просто работает», но в основном люди просто придерживаются Паркет или что-то еще.

  3. Паркет / перо так же хороши, как pyarrow.Table с точки зрения объема памяти / хранения, нодовольно медленно на полутекстовых фреймах данных (в 2-3 раза медленнее).Могу ли я сделать что-то не так?

В случае фреймов данных смешанного типа JSON по-прежнему выглядит как вариант в соответствии с нашими тестами.

Я могу предоставить цифры, если это необходимо.

...