Spark SQL Dataframe

Et dataframe som ligner på RDD er en abstraksjon gitt for strukturerte data i Spark SQL-biblioteket. Det er en distribuert samling av data som kan betraktes som en tabell i en relasjonsdatabase med et skjema vedlagt. Det kan også defineres som samlingen av navngitte kolonner. Spark SQL er et av bibliotekene som er tilgjengelige i Spark-stabelen som inneholder informasjon om strukturen og beregningen som blir utført på dataene. Denne tilleggsinformasjonen brukes til å utføre optimaliseringer. Et dataframe inkluderer fordelene ved RDD sammen med optimaliseringsteknikker, og dette API er tilgjengelig i Python, R, Scala og Java.

De forskjellige kildene som genererer et dataframe er-

  • Eksisterende RDD
  • Strukturerte datafiler og databaser
  • Hive-tabeller

Need of Dataframe

Gnistfellesskapet har alltid prøvd å bringe struktur til dataene, der gnist SQL-dataframmer er trinnene som er tatt i den retningen. Den første APIen for gnist, RDD er for ustrukturerte data der beregningene og dataene begge er ugjennomsiktige. Dermed var det et krav om å lage et API som er i stand til å gi ytterligere fordeler ved optimalisering. Nedenfor er de få kravene som lå til grunn for dataframe-

  • Prosessstrukturerte og semidata
  • Flere datakilder
  • Integrasjon med flere programmeringsspråk
  • Antall operasjoner som kan utføres på dataene, for eksempel velg & filter.

Hvordan lage Spark SQL Dataframe?

Før du forstår måter å lage et dataframe på, er det viktig å forstå et annet konsept der gnistprogrammer lager dataframe fra forskjellige kilder. Dette konseptet er kjent som gnister og er inngangspunktet for all gnistfunksjonalitet. Tidligere måtte vi opprette sparkConf, sparkContext eller sqlContext hver for seg, men med gnistresession, er alle innkapslet under en økt der gnist fungerer som et gnisterobjekt.

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

Måter å lage et dataframe på

  1. Fra eksisterende RDD

Det er to måter en Dataframe kan opprettes gjennom RDD. En måte å bruke refleksjon som automatisk infiserer skjemaet for dataene og den andre tilnærmingen er å lage et skjema programmatisk og deretter bruke til RDD.

  • Ved å utlede skjemaet

En enkel måte å konvertere en RDD til Dataframe er når den inneholder saksklasser på grunn av Sparks SQL-grensesnitt. Argumentene som sendes til saksklassene hentes ved hjelp av refleksjon, og det blir navnet på kolonnene i tabellen. Sekvenser og matriser kan også defineres i saksklasser. RDD som vil bli opprettet ved å bruke saksklassen, kan implisitt konverteres til Dataframe ved å bruke toDF () -metoden.

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

Et dataframe-kjøretøy opprettes og kan registreres som en tabell som sql-setninger kan utføres mot.

  • Ved å programmere spesifisere skjemaet

Det kan være tilfeller der vi ikke er klar over skjemaet på forhånd, eller scenarier der saksklasser ikke kan ta mer enn 22 felt. Under slike forhold bruker vi tilnærmingen til å programmatisk lage skjemaet. For det første opprettes en RDD med rader fra den opprinnelige RDD, dvs. konvertering av rdd-objektet fra rdd (t) til rdd (rad). Lag deretter et skjema ved hjelp av StructType (tabell) og StructField (felt) -objekter. Dette skjemaet brukes på RDD of Rows ved hjelp av createDataFrame-metoden som ligner strukturen til rdd (rad) opprettet tidligere.

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. Gjennom datakilder

Spark tillater oppretting av dataframes gjennom flere kilder som bikube, json, parkett, csv og tekstfiler som også kan brukes til å lage dataframes.

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-operasjoner

Ettersom dataene er lagret i tabellformat sammen med skjemaet, er det et antall operasjoner som kan utføres på dataframmen. Det tillater flere operasjoner som kan utføres på data i dataframmer.

Vurder fil er et dataframe som er opprettet fra en csv-fil med to kolonner - FullName og AgePerPA

  1. printSchema () - For å vise skjemestrukturen

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

  1. select- Ligner på valg av setning i SQL, viser frem dataene som nevnt i valgt setning.

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

  1. Filter- For å se filtrerte data fra dataframmen. Tilstanden nevnt i kommandoen

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

  1. GroupBy- For å gruppere verdiene

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

  1. show () - for å vise innholdet i dataframe

file.show()

begrensninger

Selv om du med dataframes kan oppdage sql-syntaksfeil på selve kompileringstiden, er det ikke i stand til å håndtere noen analyserelaterte feil før kjøretid. Hvis det for eksempel blir referert til et ikke-eksisterende kolonnenavn i koden, blir det ikke lagt merke til før kjøretid. Dette vil føre til å kaste bort utviklerens tid og prosjektkostnader.

Konklusjon - Spark SQL Dataframe

Denne artikkelen gir et helhetsbilde (behov, oppretting, begrensninger) om dataframe API til Spark SQL. På grunn av dataframe-API-ene er Spark SQL fortsatt et av de mye brukte bibliotekene. Akkurat som en RDD gir den funksjoner som feiltoleranse, lat evaluering, prosessering i minnet sammen med noen ekstra fordeler. Det kan defineres som data distribuert over klyngen i tabellform. Dermed vil et dataframe ha et skjema tilknyttet det og kan opprettes gjennom flere kilder via gnistøktobjekt.

Anbefalte artikler

Dette er en guide til Spark SQL Dataframe. Her diskuterer vi måtene å lage et dataframe med DataFrame Operations and Limitations. Du kan også se på følgende artikkel for å lære mer -

  1. Spark Shell-kommandoer
  2. Markører i SQL
  3. SQL-begrensninger
  4. Database i SQL
  5. Typer ledd i Spark SQL (eksempler)
  6. Veiledning til listen over Unix Shell-kommandoer

Kategori: