Теперь я читаю большой CSV-файл, используя Dask, и выполняю некоторую постобработку (например, делаю математические вычисления, затем прогнозирую их с помощью модели ML и записываю результаты в базу данных). Избегая загрузки всех данных в память, я хочу читать по частям текущего размера: прочитать первый кусок, предсказать, записать, прочитать второй кусок и т. Д. c.
Я попробовал следующее решение, используя skiprows
и nrows
:
import dask.dataframe as dd
read_path = "medium.csv"
# Read by chunk
skiprows = 100000
nrows = 50000
res_df = dd.read_csv(read_path, skiprows=skiprows)
res_df = res_df.head(nrows)
print(res_df.shape)
print(res_df.head())
Но я получаю ошибку:
ValueError: Образец недостаточно велик, чтобы включить хотя бы одну строку данных. Пожалуйста, увеличьте число байтов в sample
в вызове до read_csv
/ read_table
Также, как я понимаю, он будет вычислять двоичную маску каждый раз ([False, False, .. ., True, ...]) для всех данных, чтобы найти строки для загрузки. Как мы можем сделать это более эффективным? Может быть, использовать некоторые распределенные или отложенные функции из dask?