2015-04-15 19 views
5

Istnieją wskazania, że ​​sprzężenia w Sparku są realizowane za pomocą/opartej na funkcji/prymitywie/transformacji grupy. Pozwólcie, że skupię się najpierw na cogroup - zwraca wynik, którym jest RDD składający się zasadniczo ze WSZYSTKICH elementów zsynchronizowanych RDD. Mówi się w inny sposób - dla każdego klucza w każdym z zgrokowanych RDD istnieje co najmniej jeden element z co najmniej jednego z zgrokowanych RDD.sprzężenia i cogroup w Spark

To oznaczałoby, że gdy mniejszy, ponadto przesyłanie strumieniowe np. JavaPairDstreamRDDs wciąż łączy się z dużo większym, wsadowym RDD, co skutkowałoby przydzieleniem pamięci RAM dla wielu wystąpień wyniku (cogrouped) RDD aka zasadniczo dużego wsadu RDD i trochę więcej ... Oczywiście pamięć RAM zostanie zwrócona, gdy DDream RDD otrzymają wyrzucić i robią regularnie, ale wydaje się, że skok w niepotrzebnego zużycia RAM

mam dwa pytania:

  1. Czy mimo to kontrolować proces cogroup bardziej „dokładnie”, np powiedz, aby zawierał tylko elementy z RDD z elementami zgrokowanymi, w których jest co najmniej jeden element z KAŻDEGO z zgrubionych RDD na dany klucz. W oparciu o aktualną API grupy nie jest to możliwe.

  2. Jeśli cogroup jest naprawdę takim młotem, a po drugie połączenia są oparte na cogroup, nawet jeśli mogą przedstawić ładniejszy obraz pod względem końcowego efektu widocznego do końca użytkownik oznacza to, że pod maską nadal jest takie samo okropne zużycie pamięci RAM, które jest w tej chwili obciążone:

Odpowiedz

5

To nie jest takie złe. W dużej mierze zależy to od szczegółowości partycjonowania. CGrupa będzie najpierw przetasować według klucza, na dysku, do odrębnych węzłów executorów. Dla każdego klucza, tak, cały zestaw wszystkich elementów z tym kluczem, dla obu RDD, zostanie załadowany do pamięci RAM i zostanie ci przekazany. Ale nie wszystkie klucze muszą znajdować się w pamięci RAM w danym momencie, więc jeśli twoje dane nie są naprawdę przekręcone, nie będziesz za to cierpieć.

+0

Czy przy pomocy partycjonowania z tym samym programem partycjonującym, zanim skorzystasz z pomocy cogrouping? –

+0

Mam więcej niż 5 JavaPairRDD, zawierają parę masterRDD. Chcę połączyć te wszystkie oparte pary MasterRDD. Jak mogę to zrobić ? – junsid

+0

Jak używać 'cogroup' dla dużych zbiorów danych, np. Gdy używam' collect() ', to wyrzuca z pamięci wyjątek' rdd1 = rdd2.cogroup (rdd3) .collect'. Czy możesz pomóc w tej sprawie [https://stackoverflow.com/questions/47180307/how-to-use-cogroup-for-large-datasets]. mogę partycjonować pomoc Jestem nowy, aby zainicjować jakąkolwiek pomoc, aby rozwiązać ten problem. – Vignesh

Powiązane problemy