Почему преобразование серии Dask в категориальные замедленные вычисления? - PullRequest
0 голосов
/ 28 ноября 2018

У меня ~ 5,5 ГБ набора данных, хранящегося в Parquet.У меня есть ряд в этом наборе данных account_language, который изначально имеет тип object (string).

Может кто-нибудь объяснить, почему такой же расчет занимает гораздо больше времени после преобразования ряда в категориальный?Неправильно ли я конвертирую в категорическое?

df = dd.read_parquet('dataset', engine='fastparquet')

%time pre_cat_val_counts = df.account_language.value_counts().compute()

Время CPU: пользователь 2.9 с, sys: 678 мс, всего: 3.57 с Время на стене: 3.34 с

df = df.categorize(columns=['account_language'])
%time post_cat_val_counts = df.account_language.value_counts().compute()

Время ЦП: пользователь 1 мин 4 с, sys: 23 с, всего: 1 мин 27 с> Время ожидания: 1 мин 9 с

1 Ответ

0 голосов
/ 28 ноября 2018

Так что в процессе обдумывания этого я решил это, но подумал, когда я писал вопрос, я мог бы также оставить что-то на случай, если это будет полезно.Причиной было неправильное понимание того, как работает Dask.

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

df = df.categorize(columns=['account_language']).compute()
%time post_cat_val_counts = df.account_language.value_counts()

Время ЦП: пользователь 42,5 мс, sys: 1,08 мс, всего: 43,6 мс Время стены: 42,4 мс

...