Spark SQL Dataframe

Dataframe podobné RDD je abstrakce pro strukturovaná data v knihovně Spark SQL. Jde o distribuovanou sbírku dat, která lze považovat za tabulku v relační databázi s připojeným schématem. Může být také definována jako kolekce pojmenovaných sloupců. Spark SQL je jednou z knihoven dostupných v zásobníku Spark, který obsahuje informace o struktuře a výpočtu, které se na datech provádí. Tyto další informace se používají k provádění optimalizací. Dataframe zahrnuje výhody RDD spolu s optimalizačními technikami a toto API je dostupné v Pythonu, R, Scale a Java.

Různé zdroje, které generují dataframe, jsou

  • Existující RDD
  • Strukturované datové soubory a databáze
  • Tabulky úlů

Potřeba Dataframe

Komunita jisker se vždy snažila přenést strukturu dat, kde jiskra SQL-dataframes jsou kroky učiněné tímto směrem. Počáteční API jiskry RDD je pro nestrukturovaná data, kde jsou výpočty i data neprůhledná. Bylo tedy požadováno vytvoření API, které je schopné poskytovat další výhody optimalizace. Níže je několik požadavků, které tvořily základ dataframe-

  • Zpracovat strukturovaná a semi-data
  • Více zdrojů dat
  • Integrace s více programovacími jazyky
  • Počet operací, které lze s daty provádět, jako je výběr a filtr.

Jak vytvořit Spark SQL Dataframe?

Před pochopením způsobů vytvoření dataframe je důležité porozumět dalšímu konceptu, kterým jiskrové aplikace vytvářejí dataframe z různých zdrojů. Tento koncept je známý jako sparksession a je vstupním bodem pro všechny funkce jisker. Dříve jsme museli vytvářet spark spark, sparkContext nebo sqlContext jednotlivě, ale s sparksession jsou všechny zapouzdřeny do jedné relace, kde iskra funguje jako objekt sparksession.

import org.apache.spark.sql.SparkSession
val spark = SparkSession
.builder()
.appName("SampleWork")
.config("config.option", "value")
.getOrCreate()

Způsoby vytvoření dataframe

  1. Z existujícího RDD

Existují dva způsoby, jak lze vytvořit dataframe prostřednictvím RDD. Jedním ze způsobů je použití odrazu, který automaticky odvozuje schéma dat, a druhým přístupem je programové vytvoření schématu a následné použití na RDD.

  • Odvozením schématu

Snadný způsob převodu RDD na Dataframe je, když obsahuje třídy případů kvůli rozhraní Spark SQL. Argumenty předávané třídám případů jsou vyvolány pomocí reflexe a stává se názvem sloupců tabulky. Sekvence a pole lze také definovat ve třídách případů. RDD, který bude vytvořen pomocí třídy případů, lze implicitně převést na Dataframe pomocí metody toDF ().

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
case class Transport(AutoName: String, year: Int)
val Vehicle = sc.textFile("//path//").map(_.split(", ")).map(p => Transport(p(0), p(1)).toDF()

Je vytvořeno dataframe Vehicle a lze jej zaregistrovat jako tabulku, proti které lze provádět příkazy sql.

  • Programovým určením schématu

Mohou existovat případy, kdy si předem nevíme schéma, nebo scénáře, kde třídy případů nemohou mít více než 22 polí. V takových podmínkách využíváme přístup programového vytváření schématu. Nejprve se vytvoří RDD řádků z původního RDD, tj. Převede se objekt rdd z rdd (t) na rdd (row). Poté vytvořte schéma pomocí objektů StructType (Table) a StructField (Field). Toto schéma je aplikováno na RDD řádků pomocí metody createDataFrame, která se podobá struktuře dříve vytvořeného rdd (řádku).

val Vehicle = sc.textFile("//path")
import org.apache.spark.sql._
val schema = StructType(Array(StructField("AutoName", StringType, true), StructField("Year", IntegerType, true)))
scala> val rowRDD = vehicle.map(_.split(", ")).map(p => org.apache.spark.sql.Row(p(0), p(1).toInt))
val vehicleSchemaRDD = sqlContext.applySchema(rowRDD, schema)

  1. Prostřednictvím zdrojů dat

Spark umožňuje vytváření datových rámců z více zdrojů, jako jsou úly, json, parkety, csv a textové soubory, které lze také použít k vytváření datových rámců.

Val file=sqlContext.read.json(“path to the json file”)
Val file=sqlContext.read.csv(“path to the json file”)
Val file=sqlContext.read.text(“path to the json file”)
val hiveData = new org.apache.spark.sql.hive.HiveContext(sc)
val hiveDF = hiveData.sql(“select * from tablename”)

Operace DataFrame

Protože jsou data uložena v tabulkovém formátu spolu se schématem, existuje několik operací, které lze provést na datových rámcích. Umožňuje více operací, které lze provádět s daty v datových rámcích.

Zvažte soubor je dataframe, který byl vytvořen ze souboru csv se dvěma sloupci - FullName a AgePerPA

  1. printSchema () - Zobrazení struktury schématu

file.printSchema()
// |-- AgePerPA: long (nullable = true)
// |-- FullName: string (nullable = true)

  1. select- Podobně jako příkaz SELECT v SQL zobrazí data uvedená v příkazu select.

file.select("FullName").show()
// +-------+
// | name|
// +-------+
// |Sam|
// |Jodi|
// | Bala|
// +-------+

  1. Filtr - Zobrazení filtrovaných dat z datového rámce. Podmínka uvedená v příkazu

file.filter($"AgePerPA" > 18).show()

  1. GroupBy- Seskupení hodnot

file.groupBy("AgePerPA").count().show()

  1. show () - pro zobrazení obsahu dataframe

file.show()

Omezení

Ačkoli s datovými rámci můžete zachytit chybu syntaxe sql v době kompilace, není schopna zpracovat žádnou chybu související s analýzou, dokud není runtime. Pokud se například v kódu odkazuje na neexistující název sloupce, nebude to zaznamenáno, dokud nebude běhový modul spuštěn. To by vedlo ke ztrátě času a nákladů na vývojáře.

Závěr - Spark SQL Dataframe

Tento článek poskytuje celkový obrázek (potřeba, vytvoření, omezení) o dataframe API Spark SQL. Díky popularitě dataframe API zůstává Spark SQL jednou z široce používaných knihoven. Stejně jako RDD poskytuje funkce, jako je odolnost proti chybám, líné vyhodnocení, zpracování v paměti spolu s některými dalšími výhodami. Lze jej definovat jako data distribuovaná v klastru v podobě tabulky. Datafame tedy bude mít přidružené schéma a může být vytvořeno prostřednictvím více zdrojů prostřednictvím objektu relace jisker.

Doporučené články

Toto je průvodce Spark SQL Dataframe. Zde diskutujeme způsoby vytvoření dataframe s operacemi a omezeními DataFrame. Další informace naleznete také v následujícím článku -

  1. Příkazy Spark Shell
  2. Kurzory v SQL
  3. Omezení SQL
  4. Databáze v SQL
  5. Typy spojení ve Spark SQL (příklady)
  6. Průvodce seznamem unixových příkazů shellu

Kategorie: