Dask вычисляет очень медленно - PullRequest
0 голосов
/ 07 октября 2018

У меня есть датафрейм, состоящий из 5 миллионов записей.Я пытаюсь обработать его, используя приведенный ниже код, используя dask-фреймы данных в python

 import dask.dataframe as dd                                          
 dask_df = dd.read_csv(fullPath)
 ............
 for index , row in uniqueURLs.iterrows():
   print(index);
   results = dask_df[dask_df['URL'] == row['URL']]
   count = results.size.compute();

Но я заметил, что dask очень эффективен при фильтрации фреймов данных, НО в .compute ().Так что, если я удалил строку, которая вычисляет размер результатов, моя программа окажется очень быстрой.Может кто-нибудь объяснить это?Как я могу сделать это быстрее?

1 Ответ

0 голосов
/ 07 октября 2018

Но я заметил, что dask очень эффективен при фильтрации кадров данных, НО в .compute ().

Вы неправильно понимаете, как работает dask.dataframe.Строка results = dask_df[dask_df['URL'] == row['URL']] выполняет никаких вычислений для набора данных.Он просто хранит инструкции относительно вычислений, которые могут быть запущены на более позднем этапе.

Все вычисления применяются только со строкой count = results.size.compute().Это вполне ожидаемо, поскольку dask работает лениво.

Подумайте о генераторе и такой функции, как list, которая может исчерпать генератор.Сам генератор ленив, но будет запускать операции при вызове функцией.dask.dataframe также ленив, но работает умно, формируя внутреннюю «цепочку» последовательных операций.

Вы должны увидеть Laziness and Computing из документации для получения дополнительной информации.

...