У меня очень большой (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 ГБ, а у пандв порядке.
Есть идеи?