Pokročilý výběr II: SQL
Jak už bylo zmíněno, při použití rozhraní dplyr převádí sparklyr tvůj kód do SQL, než ho předá Sparku. Ve většině případů je to přesně to, co chceš. Můžeš ale také psát SQL přímo – a dosáhnout stejného výsledku. Většinou to není nejlepší nápad, protože takový kód se hůř píše i ladí. Pokud ale chceš, aby byl tvůj kód přenositelný – tedy použitelný i mimo R – může se to hodit. Běžný postup je například použít sparklyr pro experimentování se zpracováním dat a pak přejít na čisté SQL v produkčním prostředí. Když začneš rovnou s SQL, můžeš své dotazy jednoduše zkopírovat při přechodu do produkce.
SQL dotazy se zapisují jako řetězce a předávají funkci dbGetQuery() z balíčku DBI. Vzor vypadá takto:
query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)
Na rozdíl od kódu v dplyr funkce dbGetQuery() vždy dotaz ihned spustí a výsledky vrátí do R. Pokud chceš vrácení dat odložit, můžeš použít dbSendQuery() ke spuštění dotazu a dbFetch() k načtení výsledků. To je ale pokročilejší použití, které zde neprobíráme. Všimni si také, že funkce z DBI vracejí data.framey místo tibbleů – DBI je totiž balíček nižší úrovně.
Pokud se chceš dozvědět více o psaní SQL, podívej se na kurz Introduction to SQL.
Toto cvičení je součástí kurzu
Úvod do Sparku se sparklyr v R
Pokyny k cvičení
Spark připojení je k dispozici jako spark_conn. Tibble napojený na metadata skladeb uložená ve Sparku je předem definován jako track_metadata_tbl a v SQL dotazech je přístupný pod názvem track_metadata.
- Dokonči dotaz tak, aby vybral všechny sloupce ze Spark datového rámce
track_metadata, kde je hodnotayearmenší než 1935 adurationvětší než 300 sekund. - Zavolej
dbGetQuery(), aby se dotaz spustil – výsledky přiřaď do proměnnéresultsa pak si výstup zobraz.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# Write SQL query
query <- "SELECT ___ FROM ___ WHERE ___ AND ___"
# Run the query
(results <- ___(___, ___))