Загружает ли dask все столбцы при выполнении операции над одним столбцом? - PullRequest
2 голосов
/ 14 марта 2019

Всякий раз, когда я делаю вычисления с использованием dask-фрейма данных, я проверяю, загружаю ли я только необходимые столбцы, чтобы иметь возможность сэкономить на скорости вычислений.

Я просто не понимаю, как работает dask внутри и почему он не извлекает выгоду из паркетного столбчатого формата.

В небольшом приведенном ниже примере test.parquet - это файл паркета с 13 столбцами различных dtypes, 10M строк и 16 разделов. Как вы можете видеть, если меня интересует только минимум одного столбца, у меня очень заметное увеличение скорости, когда я загружаю только целевой столбец. При использовании распределенного планировщика я также вижу, что в память загружается меньше данных.

Почему dask требует больше времени для вычислений, когда я загружаю весь фрейм данных только для целевых столбцов? Чем объясняются накладные расходы в тех же вычислениях, что и в примере?

small example

1 Ответ

2 голосов
/ 14 марта 2019

На самом деле это регрессия производительности, над которой мы работаем.Существовал код для автоматической передачи выбора столбцов из кадра данных в загрузчик, чтобы делать то, что вы делаете явно, но более новый код оптимизации графа еще не полностью работает с частями ввода-вывода паркета.Если ваш обходной путь слишком раздражает, вы можете получить ту же производительность, понизив Dask на пару точечных релизов.

...