Загрузите несколько больших файлов CSV в паркет при создании нового столбца для имени файла.Python

Программы на Python
Anonymous
Загрузите несколько больших файлов CSV в паркет при создании нового столбца для имени файла.

Сообщение Anonymous »

У меня есть коллекции CSV-файлов, до 1000, каждый из которых имеет несжатый размер ~1 ГБ. Я хочу создать из них единый набор данных паркета.
При этом я хочу записать, из какого файла взят каждый набор строк.
Я хочу сделать все это менее чем с 10 ГБ оперативной памяти на Python.
Очевидно, что начать нужно с Dask.
Если я сделайте что-нибудь вроде:

Код: Выделить всё

for infile in file_list:
ddf = dd.read_csv(infile)
ddf = ddf.assign(filename=infile)
ddf.to_parquet("output_parquet_path",
append=True,
write_index=False,
write_metadata_file=True,
compute=True)
Затем я получаю сообщение об ошибке о типах столбцов, начиная со второго файла - кажется, что текстовые столбцы имеют тип string[pyarrow] в файле паркета, но объект в кадре данных Dask (см. ValueError: добавленные типы данных различаются при добавлении двух простых таблиц с помощью dask).
Если я попытаюсь полагаться на ленивый характер Dask и сделать :

Код: Выделить всё

frame_list = list()
for infile in file_list:
ddf = dd.read_csv(infile)
ddf = ddf.assign(filename=infile)
frame_list.append(ddf)

full_frame = ddf.concat(frame_list)
full_frame.to_parquet("output_parquet_path",
write_index=False,
write_metadata_file=True,
compute=True)
Затем вычисление запускается раньше и пытается загрузить все кадры в память одновременно.

Подробнее здесь: https://stackoverflow.com/questions/787 ... r-file-nam

Вернуться в «Python»