Запись DataFrames как разделенного объекта паркета в Polars с помощью PyArrow ⇐ Python
Запись DataFrames как разделенного объекта паркета в Polars с помощью PyArrow
У меня есть 12 файлов паркета в каталоге с соответствующими столбцами, которые я пытаюсь записать в секционированный объект с помощью Polars и PyArrow. Я перебираю каждый файл в каталоге и читаю его как LazyFrame. Затем я перебираю список DataFrames и записываю их в секционированный объект. Предполагаемый размер каждого DataFrame составляет ~ 1 ГБ, а все объединенные DataFrame ~ 10 ГБ. Процесс использует около 15 ГБ ОЗУ и занимает менее часа.
Я пытался сделать это с помощью следующего кода:
all_lazyframes: list[pl.LazyFrame] = [] для файла в glob.glob(input_path): lazyframe: pl.LazyFrame = pl.scan_parquet(файл) all_lazyframes.append(ленивый кадр) кадры данных: список[pl.DataFrame] = pl.collect_all(all_lazyframes) для вывода в кадрах данных: вывод.write_parquet( выходной_путь, use_pyarrow = Правда, pyarrow_options={"partition_cols": ["part"]}, ) Полученный секционированный объект имеет следующую структуру:
partitioned_object/ часть = а/ data0.parquet data1.parquet ... часть=b/ data0.parquet data1.parquet ... Размер этого объекта составляет ~250 ГБ. Мой вопрос: почему разделенный объект такой большой, если общий размер входных данных составляет всего ~ 10 ГБ? Есть ли более эффективный способ добиться этого?
У меня есть 12 файлов паркета в каталоге с соответствующими столбцами, которые я пытаюсь записать в секционированный объект с помощью Polars и PyArrow. Я перебираю каждый файл в каталоге и читаю его как LazyFrame. Затем я перебираю список DataFrames и записываю их в секционированный объект. Предполагаемый размер каждого DataFrame составляет ~ 1 ГБ, а все объединенные DataFrame ~ 10 ГБ. Процесс использует около 15 ГБ ОЗУ и занимает менее часа.
Я пытался сделать это с помощью следующего кода:
all_lazyframes: list[pl.LazyFrame] = [] для файла в glob.glob(input_path): lazyframe: pl.LazyFrame = pl.scan_parquet(файл) all_lazyframes.append(ленивый кадр) кадры данных: список[pl.DataFrame] = pl.collect_all(all_lazyframes) для вывода в кадрах данных: вывод.write_parquet( выходной_путь, use_pyarrow = Правда, pyarrow_options={"partition_cols": ["part"]}, ) Полученный секционированный объект имеет следующую структуру:
partitioned_object/ часть = а/ data0.parquet data1.parquet ... часть=b/ data0.parquet data1.parquet ... Размер этого объекта составляет ~250 ГБ. Мой вопрос: почему разделенный объект такой большой, если общий размер входных данных составляет всего ~ 10 ГБ? Есть ли более эффективный способ добиться этого?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Запись нулевых значений в файл паркета с помощью Parquet.Net создает нечитаемый файл паркета.
Anonymous » » в форуме C# - 0 Ответы
- 69 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Запись нулевых значений в файл паркета с помощью Parquet.Net создает нечитаемый файл паркета.
Anonymous » » в форуме C# - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
ОШИБКА: Не удалось построить колесо для pyarrow (Не удалось построить pyarrow)
Anonymous » » в форуме Python - 0 Ответы
- 56 Просмотры
-
Последнее сообщение Anonymous
-