Предотвратить чтение данных несколько раз с помощью Dask - PullRequest
0 голосов
/ 04 октября 2019

Что я могу сделать, чтобы один и тот же файл не читался более двух раз?

Для фона у меня есть детали ниже

Я пытаюсь прочитать список файлов в папке, преобразовать его, выведите его в файл и сначала проверьте разрыв до и после преобразования

для читающей части

def load_file(file):
   df = pd.read_excel(file)
   return df

file_list = glob2.glob("folder path here")
future_list = [delayed(load_file)(file) for file in file_list]
read_result_dd = dd.from_delayed(future_list)

После этого я выполню некоторое преобразование данных:

def transform(df):
   # do something to df
   return df

transformation_result = read_result_dd.map_partitions(lambda df: transform(df))

я хотел бы добиться двух вещей: сначала получить вывод преобразования:

Outputfile = transformation_result.compute()
Outputfile.to_csv("path and param here")

второй получить компарацию

read_result_comp = read_result_dd.groupby("groupby param here")["result param here"].sum().reset_index()
transformation_result_comp = transformation_result_dd.groupby("groupby param here")["result param here"].sum().reset_index()

Checker = read_result_dd.merge(transformation_result, on=['header_list'], how='outer').compute()
Checker.to_csv("path and param here")

Проблема в том, что если я позвонюOutputfile и Checker в последовательности, то есть:

Outputfile = transformation_result.compute()
Checker = read_result_dd.merge(transformation_result, on=['header_list'], how='outer').compute()

Outputfile.to_csv("path and param here")
Checker.to_csv("path and param here")

будет считывать весь файл дважды (для каждого вычисления)

Есть ли способ получить результат чтениясделано только один раз?

Также есть ли способ, чтобы оба compute() работали в последовательности? (если я запускаю его в две строки, из панели мониторинга dask я могу видеть, что он запустит первую, очистит панель мониторинга и запустит вторую, вместо того, чтобы запускать обе в одной последовательности)

Я не могу запустить .compute() для результирующего файла, потому что мой баран не может его содержать, результирующий кадр данных слишком велик. и средство проверки, и выходной файл значительно меньше по сравнению с исходными данными.

Спасибо

1 Ответ

0 голосов
/ 09 октября 2019

Вы можете вызвать функцию dask.compute для нескольких коллекций Dask.

a, b = dask.compute(a, b)

https://docs.dask.org/en/latest/api.html#dask.compute

В будущем я рекомендую создать MCVE * 1010. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...