Pracuję dla firmy, która musi przeprowadzić dość intensywną agregację

Dla każdej sprzedaży dokonanej w ciągu ostatnich dwóch lat chcą kroczących agregatów dotyczących danych z miesiąca poprzedzającego tę sprzedaż. Same agregaty nie są ważne. Dane z dwóch lat to około 5,5 miliona wierszy.

Doszedłem do wniosku, że powinienem użyć funkcji toczenia Dasks z indeksami zakresu danych dla ramki danych.

Maszyna, której używam, ma 4 rdzenie, więc zdecydowałem się użyć 8 partycji na danych i ponownie podzieliłem je na 8, 3-miesięczne partycje.

Jest jednak problem. Pierwszy miesiąc każdej z tych 3 partycji będzie musiał zostać przeniesiony na inną partycję. Będzie to wymagało przetasowania około 2 milionów wierszy!

Zastanawiałem się, jak w jakiś sposób włączyć kopię miesiąca, która zostanie przeniesiona na początek każdej partycji, ale nie mogę wymyślić skutecznego sposobu na zrobienie tego.

Jakieś sugestie?

1
Quajijilon 20 grudzień 2019, 00:12
To brzmi jak przedwczesna optymalizacja. 2 miliony wierszy to niewiele. Czy próbowałeś zrobić najprostsze rozwiązanie? Najprawdopodobniej problemy z wydajnością, o które się martwisz, nie mają znaczenia.
 – 
julka
20 grudzień 2019, 00:20
Właściwie, czy masz już rozwiązanie i zmierzyłeś je, aby zobaczyć, że jest zbyt wolne? Zacznij od napisania kodu, który działa :)
 – 
julka
20 grudzień 2019, 00:21
Tak. To było bardzo wolne. Chociaż zgadzam się, że 2 miliony wierszy to niewiele, na podstawie tych danych trzeba wykonać około 20 agregatów tocznych. Więc sumuje się dość szybko
 – 
Quajijilon
20 grudzień 2019, 00:31

1 odpowiedź

Wygląda na to, że możesz skorzystać z podziału danych na mniejsze partycje.

Możesz przeczytać następujące informacje: https ://docs.dask.org/en/latest/best-practices.html#avoid-very-large-partitions

0
MRocklin 21 grudzień 2019, 06:46