Przechowywanie wyników pośrednich
Jak widziałeś w rozdziale 1., kopiowanie danych między R a Spark jest z natury powolne. Oznacza to, że zbieranie danych za pomocą collect(), tak jak w poprzednim ćwiczeniu, powinno odbywać się tylko wtedy, gdy naprawdę jest to konieczne.
Operator potoku świetnie sprawdza się do łączenia kolejnych operacji na danych, ale w praktyce nie da się przeprowadzić całej analizy w jednym długim łańcuchu poleceń. Na przykład poniższy kod to bardzo zła praktyka – debugowanie czegoś takiego byłoby koszmarem.
final_results <- starting_data %>%
# 743 steps piped together
# ... %>%
collect()
Pojawia się więc dylemat: potrzebujesz przechowywać wyniki pośrednich obliczeń, ale nie chcesz ich zbierać, bo to jest powolne. Rozwiązaniem jest użycie compute() – funkcja ta wykonuje obliczenia, ale zapisuje wyniki w tymczasowej ramce danych bezpośrednio w Spark. compute() przyjmuje dwa argumenty: tibbla oraz nazwę zmiennej dla ramki danych Spark, w której zostaną zapisane wyniki.
a_tibble %>%
# some calculations %>%
compute("intermediate_results")
To ćwiczenie jest częścią kursu
Wprowadzenie do Spark z pakietem sparklyr w R
Instrukcje do ćwiczenia
Połączenie ze Spark zostało już utworzone jako spark_conn. Tibble powiązany z metadanymi ścieżek zapisanymi w Spark jest predefiniowany jako track_metadata_tbl.
- Przefiltruj wiersze
track_metadata_tbl, wybierając te, w którychartist_familiarityjest większe niż 0,8. - Oblicz wyniki za pomocą
compute().- Zapisz wyniki w ramce danych Spark o nazwie
"familiar_artists". - Przypisz wynik do tibble R o nazwie
computed.
- Zapisz wyniki w ramce danych Spark o nazwie
- Sprawdź dostępne zbiory danych Spark za pomocą
src_tbls(). - Wyświetl
class()obiektucomputed. Zwróć uwagę, że w odróżnieniu odcollect(), funkcjacompute()zwraca zdalnego tibble. Dane nadal są przechowywane w klastrze Spark.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# track_metadata_tbl has been pre-defined
track_metadata_tbl
computed <- track_metadata_tbl %>%
# Filter where artist familiarity is greater than 0.8
___ %>%
# Compute the results
___
# See the available datasets
___
# Examine the class of the computed results
___