Разделение очень больших файлов csv на файлы меньшего размера

Подходит ли Dask для параллельного чтения больших CSV-файлов и разделения их на несколько файлов меньшего размера?


person Nutsa Nazgaidze    schedule 27.11.2019    source источник


Ответы (2)


Да, dask может читать большие файлы CSV. Он разделит их на куски

df = dd.read_csv("/path/to/myfile.csv")

Затем при сохранении Dask всегда сохраняет данные CSV в несколько файлов.

df.to_csv("/output/path/*.csv")

Дополнительную информацию об этом см. в строках документации read_csv и to_csv.

person MRocklin    schedule 29.11.2019

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

Создать кадр данных

import dask.dataframe as dd
import numpy as np
import pandas as pd
import string

letters = list(string.ascii_lowercase)

N = int(1e6)
df = pd.DataFrame({"member":np.random.choice(letters, N),
                   "values":np.random.rand(N)})

df.to_csv("file.csv", index=False)

Один parquet файл (папка) на каждого участника

Если вы довольны выводом в формате parquet, вы можете просто использовать параметр partition_on как

df = dd.read_csv("file.csv")
df.to_parquet("output", partition_on="member")

Если вам действительно нужен csv, вы можете конвертировать в этот формат. Я настоятельно рекомендую вам перенести ваши данные на parquet.

person rpanai    schedule 27.11.2019