Apache Spark Catalyst Optimizer steps
Catalyst Optimizer

Apache Spark / Dataframe API vs. SQL

Pracovat s daty pomocí Apache Spark je možné hned několika způsoby. Pokud pocházíte spíše z prostředí softwarového vývoje, budete zřejmě inklinovat k použití Dataframe API, tzn. k volání funkcí select, filter, orderBy a dalších.

df.select(
  col("hodnota").as("quantity"),
  col("rok").as("year"),
  col("DRUHZVIRE_txt").as("animal")
).filter(col("uzemi_txt") === lit("Olomoucký kraj"))
  .filter(col("year") === lit("2018"))
  .orderBy(desc("quantity"))
  .show()
+--------+----+---------------+
|quantity|year|         animal|
+--------+----+---------------+
|  609373|2018|         Drůbež|
|  146772|2018|        Slepice|
|   92806|2018|           Skot|
|   85838|2018|        Prasata|
|   39619|2018|          Krávy|
|    9936|2018|           Ovce|
|    5589|2018|Prasnice chovné|
|    1829|2018|           Koně|
|    1599|2018|           Kozy|
+--------+----+---------------+

Pro ty, kterým se na druhou stranu lépe přemýšlí ve „standardním“ SQL, je určen Spark SQL modul.

df.createOrReplaceTempView("animals")

sparkSession
  .sql(
    """SELECT hodnota AS quantity
    |       , rok AS year
    |       , DRUHZVIRE_txt AS animal
    |    FROM animals
    |    WHERE (uzemi_txt='Olomoucký kraj')
    |      AND (rok='2018')
    |    ORDER BY 1 DESC
    |""".stripMargin
  )
  .show()
+--------+----+---------------+
|quantity|year|         animal|
+--------+----+---------------+
|  609373|2018|         Drůbež|
|  146772|2018|        Slepice|
|   92806|2018|           Skot|
|   85838|2018|        Prasata|
|   39619|2018|          Krávy|
|    9936|2018|           Ovce|
|    5589|2018|Prasnice chovné|
|    1829|2018|           Koně|
|    1599|2018|           Kozy|
+--------+----+---------------+

Oba přístupy mají své pro a proti, z hlediska výkonnosti jsou ale identické. Na pozadí se u obou dotazů nejdříve vygeneruje tzv. prázdný plán, který zaručuje formální správnost zápisu. Ten je dále podroben věcné analýze, tedy ověření, že použité tabulky a sloupce opravdu existují a že se použité datové typy shodují se zdrojovými daty. Teprve po tomto kroku vstupuje do hry jedna z nejsilnějších stránek Sparku – optimalizace, vytvoření několika fyzických plánů (= způsobů, jak příkazy provést na konkrétním železe) a následně volba toho, který dokáže dotaz zpracovat za co nejkratší čas a s co možná nejmenším množstvím prostředků.


Celý projekt s příklady je k dispozici na githubu.

Zanechte komentář

Vaše emailová adresa nebude zobrazena. Povinná pole jsou označena *