mi podział ramki danych z split()
w celu wykorzystania parLapply()
do wywoływania funkcji każdej partycji równolegle. Ramka danych ma 1,3 miliona wierszy i 20 koli. Dzielę się/dzielę na dwie kolumny, oba typy znaków. Wygląda na to, że są to unikalne identyfikatory ~ 47K i unikalne kody ~ 12K, ale nie wszystkie pary identyfikatorów i kodów są dopasowane. Wynikowa liczba partycji wynosi ~ 250 KB. Oto split()
linia:szybki sposób rozdzielić w R
system.time(pop_part <- split(pop, list(pop$ID, pop$code)))
Przegrody zostaną następnie podawany do parLapply()
następująco:
cl <- makeCluster(detectCores())
system.time(par_pop <- parLapply(cl, pop_part, func))
stopCluster(cl)
Mam niech sam kod split()
uruchomić prawie godzinę i to nie kompletne. Mogę się podzielić przez sam identyfikator, co zajmuje około 10 minut. Dodatkowo, studio R i wątki robocze zużywają ~ 6 GB pamięci RAM.
Powód, dla którego znam wynikową liczbę partycji, mam równoważny kod w Pentaho Data Integration (PDI), który działa w ciągu 30 sekund (dla całego programu, a nie tylko "podzielony" kod). Nie mam nadziei na tego rodzaju występy z R, ale coś, co może zakończyć się w najgorszym przypadku w 10-15 minut.
Główne pytanie: Czy istnieje lepsza alternatywa dla podziału? Próbowałem też ddply()
z .parallel = TRUE
, ale trwało to ponad godzinę i nigdy się nie zakończyło.
Dzięki, spróbuję. Ha, faktycznie napisałem kod R początkowo, a następnie przeniesiłem go do PDI (jestem bardziej doświadczony z R niż PDI). – argoneus
Uruchomiłem kod 'split()', który wysłałeś i czekałeś przez prawie godzinę, ale nigdy nie został on ukończony. – argoneus
Dodano kilka dodatkowych sugestii dotyczących podziału, które powinny trwać co najmniej sekundę. Może czynniki powodują również, że func jest wolny? –