Spark SQL Dataframe

Et dataframe, der ligner RDD, er en abstraktion tilvejebragt for strukturerede data i Spark SQL-biblioteket. Det er en distribueret samling af data, der kan betragtes som en tabel i en relationel database med et vedhæftet skema. Det kan også defineres som samlingen af ​​navngivne kolonner. Spark SQL er et af de tilgængelige biblioteker i Spark-stakken, der indeholder information om strukturen og beregningen, der udføres på dataene. Denne yderligere information bruges til at udføre optimeringer. Et dataframe inkluderer fordelene ved RDD sammen med optimeringsteknikker, og denne API er tilgængelig i Python, R, Scala og Java.

De forskellige kilder, der genererer en dataframe, er-

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

Behov for Dataframe

Gnistfællesskabet har altid forsøgt at bringe struktur til dataene, hvor gnist SQL-dataframes er de trin, der er taget i den retning. Den oprindelige API for gnist, RDD er til ustrukturerede data, hvor beregningerne og dataene begge er uigennemsigtige. Der var således et krav om at oprette en API, der er i stand til at give yderligere fordele ved optimering. Nedenfor er de få krav, der lå til grund for dataframe-

  • Processtruktureret og semidata
  • Flere datakilder
  • Integration med flere programmeringssprog
  • Antallet af handlinger, der kan udføres på dataene, f.eks. Vælg & filter.

Hvordan oprettes Spark SQL Dataframe?

Inden man forstå måder, hvorpå man kan oprette et dataframe, er det vigtigt at forstå et andet koncept, hvor gnistapplikationer opretter dataframe fra forskellige kilder. Dette koncept er kendt som gnistresession og er indgangspunktet for al gnistfunktionalitet. Tidligere var vi nødt til at oprette sparkConf, sparkContext eller sqlContext hver for sig, men med gnisteression er alle indkapslet under en session, hvor gnist fungerer som et gnisterobjekt.

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

Måder at oprette et dataframe

  1. Fra eksisterende RDD

Der er to måder, hvorpå en Dataframe kan oprettes gennem RDD. Den ene måde er at bruge refleksion, som automatisk inficerer datagrammet og den anden tilgang er at oprette et skema programmatisk og derefter anvende til RDD.

  • Ved at udlede skemaet

En nem måde at konvertere en RDD til Dataframe er, når den indeholder sagsklasser på grund af Sparks SQL-interface. Argumenterne, der er videregivet til sagsklasserne, hentes ved hjælp af refleksion, og det bliver navnet på tabellens kolonner. Sekvenser og matriser kan også defineres i sagsklasser. Den RDD, der oprettes ved hjælp af caseklassen, kan implicit konverteres til Dataframe ved hjælp af 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()

Et dataframe-køretøj oprettes og kan registreres som en tabel, hvortil SQL-sætninger kan udføres.

  • Ved programmatisk at specificere skemaet

Der kan være tilfælde, hvor vi ikke er opmærksomme på skemaet på forhånd eller scenarier, hvor caseklasser ikke kan tage mere end 22 felter. Under sådanne forhold bruger vi fremgangsmåden til programmatisk at skabe skemaet. For det første oprettes en RDD af rækker fra den originale RDD, dvs. konvertering af rdd-objektet fra rdd (t) til rdd (række). Opret derefter et skema vha. Objekterne StructType (tabel) og StructField (felt). Dette skema anvendes på RDD of Rows ved hjælp af createDataFrame-metoden, som ligner strukturen i rdd (række) oprettet 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. Gennem datakilder

Gnist muliggør oprettelse af dataframes gennem flere kilder, såsom bikube, json, parket, csv og tekstfiler, der også kan bruges til at oprette 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-operationer

Da dataene er gemt i et tabelformat sammen med skemaet, er der et antal operationer, der kan udføres på dataframmen. Det tillader flere operationer, der kan udføres på data i dataframes.

Overvej fil er et dataframe, der er oprettet fra en csv-fil med to kolonner - FullName og AgePerPA

  1. printSchema () - For at se skemastrukturen

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

  1. select- I lighed med at vælge sætning i SQL, viser dataene som nævnt i den valgte sætning.

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

  1. Filter- For at se de filtrerede data fra dataframe. Betingelsen nævnt i kommandoen

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

  1. GroupBy- For at gruppere værdierne

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

  1. show () - for at få vist indholdet i dataframe

file.show()

Begrænsninger

Selvom du med dataframes kan fange sql-syntaksefejl på selve kompileringstidspunktet, er det ikke i stand til at håndtere nogen analyserelateret fejl indtil runtime. For eksempel, hvis der henvises til et ikke-eksisterende kolonnenavn i koden, bliver det ikke bemærket før kørslen. Dette ville føre til at spilde udviklerens tid og projektomkostninger.

Konklusion - Spark SQL Dataframe

Denne artikel giver et samlet billede (behov, oprettelse, begrænsninger) om dataframe API for Spark SQL. På grund af dataframe-API'ernes popularitet er Spark SQL stadig et af de meget anvendte biblioteker. Ligesom en RDD giver det funktioner som fejltolerance, doven evaluering, behandling i hukommelsen sammen med nogle ekstra fordele. Det kan defineres som data distribueret over klyngen i tabelform. Således vil et dataframe have et skema tilknyttet det og kan oprettes gennem flere kilder via gnist session objekt.

Anbefalede artikler

Dette er en guide til Spark SQL Dataframe. Her diskuterer vi måderne til at oprette et dataframe med DataFrame-operationer og -begrænsninger på. Du kan også se på den følgende artikel for at lære mere -

  1. Spark Shell-kommandoer
  2. Markører i SQL
  3. SQL-begrænsninger
  4. Database i SQL
  5. Typer af sammenføjninger i Spark SQL (eksempler)
  6. Vejledning til listen over Unix Shell-kommandoer

Kategori: