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
-
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)
-
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
- printSchema () - Zobrazení struktury schématu
file.printSchema()
// |-- AgePerPA: long (nullable = true)
// |-- FullName: string (nullable = true)
- select- Podobně jako příkaz SELECT v SQL zobrazí data uvedená v příkazu select.
file.select("FullName").show()
// +-------+
// | name|
// +-------+
// |Sam|
// |Jodi|
// | Bala|
// +-------+
- Filtr - Zobrazení filtrovaných dat z datového rámce. Podmínka uvedená v příkazu
file.filter($"AgePerPA" > 18).show()
- GroupBy- Seskupení hodnot
file.groupBy("AgePerPA").count().show()
- 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 -
- Příkazy Spark Shell
- Kurzory v SQL
- Omezení SQL
- Databáze v SQL
- Typy spojení ve Spark SQL (příklady)
- Průvodce seznamem unixových příkazů shellu