Introduktion til gnistdatasæt
Datasæt er en datastruktur i Spark SQL, der giver sikkerhedstiden for kompileringstid, det objektorienterede interface samt Spark SQL's optimering.
Konceptuelt er det en in-hukommelsestabellstruktur med rækker og kolonner, der er fordelt over flere noder som Dataframe.
Det er en udvidelse af Dataframe. Den største forskel mellem datasættet og DataFrame er, at datasæt er stærkt indtastet.
(Dataset) = (Dataframe + sikkerhed for kompileringstid)
Datasæt blev frigivet i Spark 1.6 som et eksperimentelt API. Både Dataframe og Dataset er samlet i Spark 2.0-versionen, og Dataframe bliver et alias for Dataset (Row).
Dataframe = Datasæt (række)
Hvorfor har vi brug for Spark Datasæt?
For at have en klar forståelse af datasættet må vi begynde med en smule gnisthistorie og dens udvikling.
RDD er kernen i Spark. Inspireret af SQL og for at gøre tingene lettere blev Dataframe oprettet på toppen af RDD. Dataframe svarer til en tabel i en relationsdatabase eller en DataFrame i Python.
RDD giver kompileringstidssikkerhed, men der er ikke nogen automatisk optimering i RDD.
Dataframe giver automatisk optimering, men det mangler sikkerhed for kompileringstid.
Datasæt tilføjes som en udvidelse af Dataframe. Datasæt kombinerer funktionerne i både RDD (dvs. kompileringstidssikkerhed) såvel som Dataframe (dvs. Spark SQL automatisk optimering).
(RDD (Spark 1.0)) -> (Dataframe (Spark1.3)) -> (Dataset (Spark1.6))
Da datasæt har kompileret tidssikkerhed, understøttes det derfor kun på et kompileret sprog (Java & Scala), men ikke på et tolket sprog (R & Python). Men Spark Dataframe API er tilgængelig på alle de fire sprog (Java, Scala, Python & R) understøttet af Spark.
Sprog understøttet af Spark | Dataframe API | Datasæt API |
Kompileret sprog (Java & Scala) | JA | JA |
Fortolket sprog (R & Python) | JA | INGEN |
Sådan opretter du et gnistdatasæt?
Der er flere måder at oprette datasæt baseret på usecase
1. Opret først SparkSession
SparkSession er et enkelt indgangspunkt til et gnistprogram, der tillader interaktion med den underliggende Spark-funktionalitet og programmering af Spark med DataFrame og Dataset API'er.
val spark = SparkSession
.builder()
.appName("SparkDatasetExample")
.enableHiveSupport()
.getOrCreate()
- Sådan opretter du et datasæt ved hjælp af grundlæggende datastruktur som Range, Sequence, List osv.:
Brug af rækkevidde
Brug af sekvens
Brug af liste
- Sådan opretter du et datasæt ved hjælp af rækkefølgen af sagsklasser ved at kalde .toDS () -metoden:
- Sådan opretter du datasæt fra RDD ved hjælp af .toDS ():
- Sådan opretter du datasættet fra Dataframe ved hjælp af Case Class:
- Sådan opretter du datasættet fra Dataframe ved hjælp af Tuples:
2. Drift på gnistdatasæt
- Eksempel på ordtælling
- Konverter gnistdatasæt til Dataframe
Vi kan også konvertere Spark Dataset til Datafame og bruge Dataframe API'er som nedenfor:
Funktioner i Spark Dataset
- Type sikkerhed
Datasæt giver kompileringstidssikkerhed. Det betyder, at syntaks, såvel som analysefejl i applikationen, vil blive kontrolleret på kompileringstidspunktet, før det kører.
- uforanderlighed
Datasæt er også uforanderligt som RDD og Dataframe. Det betyder, at vi ikke kan ændre det oprettede datasæt. Hver gang der oprettes et nyt datasæt, når der transformeres på datasættet.
- Schema
Datasæt er en tabelstruktur i hukommelsen, der har rækker og navngivne kolonner.
- Ydeevne og optimering
Ligesom Dataframe bruger datasættet også Catalyst Optimization til at generere en optimeret logisk og fysisk forespørgselsplan.
- Programmeringssprog
Datasættet api findes kun i Java og Scala, som er kompilerede sprog, men ikke i Python, som er et tolket sprog.
- Lazy Evaluering
Ligesom RDD og Dataframe udfører datasættet også en doven evaluering. Det betyder, at beregningen kun sker, når der udføres handling. Spark laver kun planer i transformationsfasen.
- Serialisering og affaldsopsamling
Gnistdatasæt bruger ikke standard serialisatorer (Kryo eller Java-serialisering). I stedet bruger den Tungstens hurtige hukommelseskodere, der forstår den interne struktur i dataene og effektivt kan omdanne objekter til intern binær opbevaring. Det bruger dataarialisering off-heap ved hjælp af Tungsten-koderen, og der er derfor ikke behov for indsamling af affald.
Konklusion
Datasæt er det bedste af både RDD og Dataframe. RDD giver sikkerhedstypen kompileringstid, men der er ikke nogen automatisk optimering. Dataframe giver automatisk optimering, men den mangler sikkerhed for kompileringstiden. Datasæt giver både kompileringstidssikkerhed såvel som automatisk optimering. Derfor er datasættet det bedste valg for Spark-udviklere, der bruger Java eller Scala.
Anbefalede artikler
Dette er en guide til Spark Dataset. Her drøfter vi Sådan opretter du et gnistdatasæt på flere måder med eksempler og funktioner. Du kan også se på de følgende artikler for at lære mere -
- Spark Shell-kommandoer
- Spark Interview Spørgsmål
- Karriere i gnist
- Gnist streaming
- Forskellige operationer relateret til tuples
- Spark SQL Dataframe
- Typer af sammenføjninger i Spark SQL (eksempler)
- Vejledning til listen over Unix Shell-kommandoer
- Top 6 komponenter af gnist