Spark SQL Dataframe

Ett dataframe som liknar RDD är en abstraktion som tillhandahålls för strukturerad data i Spark SQL-biblioteket. Det är en distribuerad insamling av data som kan betraktas som en tabell i en relationsdatabas med bifogat schema. Det kan också definieras som samlingen med namngivna kolumner. Spark SQL är ett av de bibliotek som finns tillgängliga i Spark-stacken som innehåller information om strukturen och beräkningen som utförs på data. Denna ytterligare information används för att utföra optimeringar. Ett dataframe innehåller fördelarna med RDD tillsammans med optimeringstekniker och detta API är tillgängligt i Python, R, Scala och Java.

De olika källorna som genererar en dataframe är-

  • Befintlig RDD
  • Strukturerade datafiler och databaser
  • Hivebord

Behov av Dataframe

Gnistgemenskapen har alltid försökt föra struktur till data, där gnist SQL-dataframe är de steg som tas i den riktningen. Den initiala API för gnista, RDD är för ostrukturerad data där beräkningarna och data båda är ogenomskinliga. Därför fanns det ett krav att skapa ett API som kan ge ytterligare fördelar med optimering. Nedan följer några krav som låg till grund för dataframe-

  • Processstrukturerad och semidata
  • Flera datakällor
  • Integration med flera programmeringsspråk
  • Antalet operationer som kan utföras på data, t.ex. select & filter.

Hur skapar jag Spark SQL Dataframe?

Innan man förstår sätt att skapa en dataframe är det viktigt att förstå ett annat koncept genom vilket gnistapplikationer skapar dataframe från olika källor. Detta koncept kallas gnistoression och är utgångspunkten för all gnistfunktionalitet. Tidigare var vi tvungna att skapa sparkConf, sparkContext eller sqlContext individuellt men med gnistoression är alla inkapslade under en session där gnist fungerar som ett gnistorobjekt.

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

Sätt att skapa en dataframe

  1. Från befintlig RDD

Det finns två sätt på vilka en Dataframe kan skapas genom RDD. Ett sätt är att använda reflektion som automatiskt infogar schemat för data och det andra tillvägagångssättet är att skapa ett schema programmatiskt och sedan applicera på RDD.

  • Genom att sluta sig till schemat

Ett enkelt sätt att konvertera en RDD till Dataframe är när den innehåller fallklasser på grund av Sparks SQL-gränssnitt. Argumenten som skickats till ärendeklasserna hämtas med reflektion och det blir namnet på tabellens kolumner. Sekvenser och matriser kan också definieras i fallklasser. RDD som skapas med hjälp av fallklassen kan implicit konverteras till Dataframe med metoden 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()

Ett dataframe-fordon skapas och kan registreras som en tabell mot vilken SQL-satser kan köras.

  • Genom att programmera schemat

Det kan finnas fall där vi inte är medvetna om schemat i förväg eller scenarier där fallklasser inte kan ta mer än 22 fält. Under sådana förhållanden använder vi metoden att programmatiskt skapa schemat. Först skapas en RDD av rader från den ursprungliga RDD, dvs. konvertera rdd-objektet från rdd (t) till rdd (rad). Skapa sedan ett schema med StructType (Tabell) och StructField (Field) -objekt. Detta schema tillämpas på RDD för rader med metoden createDataFrame som liknar strukturen för rdd (rad) som skapats tidigare.

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. Genom datakällor

Spark möjliggör skapandet av dataframe genom flera källor som bikupa, json, parkett, csv och textfiler som också kan användas för att skapa dataframe.

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”)

DataFrame-operationer

Eftersom data lagras i ett tabellformat tillsammans med schemat, finns det ett antal operationer som kan utföras på dataramarna. Det tillåter flera operationer som kan utföras på data i dataframe.

Betrakta fil är ett dataframe som har skapats från en csv-fil med två kolumner - FullName och AgePerPA

  1. printSchema () - För att visa schematstrukturen

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

  1. select-samma sätt som att välja uttalande i SQL, visar upp data som nämns i markeringssatsen.

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

  1. Filter- För att visa filtrerade data från dataframe. Villkoret som nämns i kommandot

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

  1. GroupBy- För att gruppera värdena

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

  1. show () - för att visa innehållet i dataframe

file.show()

begränsningar

Med dataframe kan du fånga sql-syntaxfel vid själva kompileringstiden, men det kan inte hantera något analysrelaterat fel fram till körning. Om till exempel ett icke-existerande kolumnnamn hänvisas till i koden märks det inte förrän körtiden. Detta skulle leda till att utvecklarens tid och projektkostnad slösas bort.

Slutsats - Spark SQL Dataframe

Den här artikeln ger en övergripande bild (behov, skapande, begränsningar) om dataframe API för Spark SQL. På grund av dataframe-API: s popularitet är Spark SQL fortfarande ett av de allmänt använda biblioteken. Precis som en RDD ger den funktioner som feltolerans, lat utvärdering, behandling i minnet tillsammans med några extra fördelar. Det kan definieras som data som distribueras över klustret i tabellform. Således kommer ett dataframe att ha ett schema som är associerat med det och kan skapas genom flera källor via gnistsessionobjekt.

Rekommenderade artiklar

Detta är en guide till Spark SQL Dataframe. Här diskuterar vi sätten att skapa ett dataframe med DataFrame Operations and Limitations. Du kan också titta på följande artikel för att lära dig mer -

  1. Spark Shell-kommandon
  2. Markörer i SQL
  3. SQL-begränsningar
  4. Databas i SQL
  5. Typer av sammanfogningar i Spark SQL (exempel)
  6. Guide till listan över Unix Shell-kommandon

Kategori: