2016-06-25 52 views
6

Spark Transformations jest oceniana jako lazy - kiedy wywołujemy akcję, wykonuje wszystkie transformacje na podstawie wykresu linii.Transformacja iskry - dlaczego jest leniwa i jaka jest jej przewaga?

Jaka jest zaleta oceny len transformacji?

Czy poprawi on performance i mniejszą liczbę memory consumption w porównaniu do chętnie ocenianych?

Czy są jakieś wady związane z oceną leniwy transformacji?

Odpowiedz

10

W przypadku przekształceń Spark dodaje je do DAG obliczeń i tylko wtedy, gdy kierowca żąda pewnych danych, to DAG jest faktycznie wykonywany.

Jedną z korzyści jest to, że Spark może podejmować wiele decyzji optymalizacyjnych po tym, jak miał szansę spojrzeć na DAG w całości. Nie byłoby to możliwe, gdyby wszystko wykonało tak szybko, jak to możliwe.

Na przykład - jeśli wykonałeś każdą transformację z zapałem, co to znaczy? Oznacza to, że będziesz musiał zmaterializować wiele pośrednich zbiorów danych w pamięci. Jest to oczywiście nieefektywne - po pierwsze zwiększy koszty GC. (Ponieważ tak naprawdę nie interesują Cię wyniki pośrednie jako takie, to po prostu konwergentne abstrakcje dla ciebie podczas pisania programu.) Więc zamiast tego, to co robisz - mówisz Sparkowi, jaka jest ostateczna odpowiedź, którą interesujesz i wymyśla najlepszy sposób, aby się tam dostać.

1

Uwzględnij plik dziennika o wielkości 1 GB, w którym występują komunikaty o błędach, ostrzeżeniach i informacjach, a jest on obecny w HDFS jako bloki 64 lub 128 MB (nie ma znaczenia w tym kontekście). Najpierw utwórz RDD o nazwie "input" "tego pliku tekstowego. Następnie tworzysz inny RDD zwany "błędami" przez zastosowanie filtru na "wejściowym" RDD w celu pobrania tylko linii zawierających komunikaty o błędach, a następnie wywołanie akcji najpierw() na RDD "błędu". Spark zoptymalizuje przetwarzanie pliku log przez zatrzymanie, gdy tylko znajdzie pierwsze wystąpienie komunikatu o błędzie na dowolnej z partycji. Jeśli ten sam scenariusz powtórzyłby się w gorącej ewaluacji, Spark przefiltrowałby wszystkie partycje pliku logu, mimo że byłbyś zainteresowany tylko pierwszym komunikatem o błędzie.

2

Od https://www.mapr.com/blog/5-minute-guide-understanding-significance-apache-spark

Lazy oceny oznacza, że ​​jeśli powiesz Spark do działania na zestawie danych, słucha co prosisz go zrobić, spisuje jakiś skrót do niej, więc nie zapomnieć , a potem absolutnie nic nie robi. Będzie nadal nic nie robić, dopóki nie poprosisz o ostateczną odpowiedź. [...]

Czeka, aż skończysz, dając operatorom, i tylko wtedy, gdy poprosisz o ostateczną odpowiedź, oceniasz i zawsze stara się ograniczyć ilość pracy do wykonania.

Oszczędza to czas i niechcianą moc obliczeniową.