1. Nauka
  2. /
  3. Kursy
  4. /
  5. Wprowadzenie do Spark z pakietem sparklyr w R

Connected

ćwiczenie

Zaawansowane wybieranie danych II: SQL

Jak już wspomniano, gdy korzystasz z interfejsu dplyr, sparklyr automatycznie przekształca twój kod na SQL przed przekazaniem go do Sparka. W większości przypadków jest to dokładnie to, czego potrzebujesz. Możesz jednak również pisać SQL bezpośrednio, aby osiągnąć ten sam efekt. Zazwyczaj nie jest to najlepszy pomysł – taki kod jest trudniejszy do napisania i do debugowania. Jeśli jednak zależy ci na przenośności kodu – czyli możliwości użycia go poza R – może to być przydatne podejście. Na przykład popularnym schematem pracy jest używanie sparklyr do eksperymentowania z przetwarzaniem danych, a następnie przejście na surowy SQL w środowisku produkcyjnym. Pisząc zapytania SQL od razu, możesz po prostu skopiować je i wkleić przy przejściu do produkcji.

Zapytania SQL zapisuje się jako ciągi znaków i przekazuje do funkcji dbGetQuery() z pakietu DBI. Wzorzec wygląda następująco.

query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)

Zwróć uwagę, że w odróżnieniu od kodu dplyr, który do tej pory pisałeś, funkcja dbGetQuery() zawsze od razu wykonuje zapytanie i zwraca wyniki do R. Jeśli chcesz opóźnić zwrócenie danych, możesz użyć dbSendQuery() do wykonania zapytania, a następnie dbFetch() do pobrania wyników. To bardziej zaawansowane podejście, które nie jest omawiane w tym kursie. Warto też wiedzieć, że funkcje z pakietu DBI zwracają obiekty data.frame, a nie tibble – DBI to pakiet niższego poziomu.

Jeśli chcesz dowiedzieć się więcej o pisaniu kodu SQL, zapoznaj się z kursem Introduction to SQL.

Instrukcje

100 XP

Połączenie ze Sparkiem zostało już utworzone jako spark_conn. Tibble powiązany z metadanymi utworów przechowywanymi w Sparku jest wstępnie zdefiniowany jako track_metadata_tbl i można się do niego odwoływać w zapytaniach SQL pod nazwą track_metadata.

  • Uzupełnij zapytanie, aby wybrać wszystkie kolumny z ramki danych Spark track_metadata, gdzie year jest mniejszy niż 1935, a duration jest większa niż 300 sekund.
  • Wywołaj dbGetQuery(), aby wykonać zapytanie – przypisz wyniki do zmiennej results, a następnie wyświetl dane wyjściowe.