Dask не группирует / не применяет результаты по сравнению с пандами - PullRequest
0 голосов
/ 21 октября 2019

У меня очень большой (150M рядов - 30 ГБ ОЗУ) кадр данных. Я делаю группу (около 40 групп) и применяю функцию к каждой группе. Занимает около 30 минут, чтобы выполнить все. Вот код, который я использовал:

df = df.groupby(by='date').apply(func=my_func)

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

Поэтому я использую этот код:

from dask import dataframe as dd



df_dask = dd.from_pandas(df_pandas, npartitions=40)
template = pd.DataFrame(columns=['A','B','C','D','E'])
df_dask = df_dask.groupby(by='date').apply(func=my_func, meta=template)
df_dask = df_dask.compute()

Однако, когда я запускаю это, я получаю разные результаты в зависимости от значения npartitions , которое я даю. Если я даю значение 1, это дает мне те же (и правильные) результаты, но тогда это занимает столько же времени, что и с пандами. Если я задаю ему большее число, он работает быстрее, но возвращает намного меньше строк. Я не понимаю взаимосвязи между npartitions и groupby.

Кроме того, если я пытаюсь использовать немного больший размер DataFrame (40 ГБ), у Dask заканчивается память, хотя у меня на компьютере 64 ГБ, а у пандв порядке.

Есть идеи?

1 Ответ

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

Dask DataFrameGroupBy.apply применяет предоставляемую пользователем функцию к каждому разделу: https://docs.dask.org/en/latest/dataframe-api.html#dask.dataframe.groupby.DataFrameGroupBy.apply.

Если вам нужно пользовательское сокращение, используйте Aggregate: https://docs.dask.org/en/latest/dataframe-groupby.html#aggregate

...