Spark SQL Dataframe

Un cadru de date similar cu RDD este o abstractizare furnizată pentru date structurate în biblioteca Spark SQL. Este o colecție distribuită de date care poate fi considerată un tabel într-o bază de date relațională cu o schemă atașată. De asemenea, poate fi definit ca colecția de coloane numite. Spark SQL este una dintre bibliotecile disponibile în stiva Spark care conține informații despre structură și calcul care se efectuează pe date. Aceste informații suplimentare sunt utilizate pentru a realiza optimizări. Un cadru de date încorporează avantajele RDD împreună cu tehnicile de optimizare și această API este disponibilă în Python, R, Scala și Java.

Sursele diferite care generează un cadru de date sunt-

  • RDD existent
  • Fișiere de date structurate și baze de date
  • Mese din stup

Necesitatea cadrului de date

Comunitatea de scânteie a încercat întotdeauna să aducă structura la date, unde cadrele SQL-scânteie sunt pașii făcuți în această direcție. API-ul inițial al scânteii, RDD este pentru datele nestructurate în care calculele și datele sunt ambele opace. Astfel, a existat o cerință de a crea o API care să poată oferi beneficii suplimentare de optimizare. Mai jos sunt câteva cerințe care au stat la baza cadrului de date

  • Procesați structurate și semi-date
  • Surse de date multiple
  • Integrare cu mai multe limbaje de programare
  • Numărul de operații care pot fi efectuate pe date, cum ar fi selectarea & filtrarea.

Cum se creează Spark SQL Dataframe?

Înainte de a înțelege modalitățile de creare a unui cadru de date, este important să înțelegeți un alt concept prin care aplicațiile de scânteie creează cadre de date din surse diferite. Acest concept este cunoscut sub numele de sparksession și este punctul de intrare pentru toată funcționalitatea scânteie. Mai devreme, a trebuit să creăm sparkConf, sparkContext sau sqlContext individual, dar cu scânteie, toate sunt încapsulate în cadrul unei sesiuni în care scânteia acționează ca un obiect de scânteie.

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

Modalități de creare a unui cadru de date

  1. Din RDD existent

Există două moduri în care un Dataframe poate fi creat prin RDD. Unul dintre moduri este folosirea reflecției care aduce automat schema datelor, iar cealaltă abordare este crearea unei scheme programatic și apoi aplicarea la RDD.

  • Prin adăugarea schemei

Un mod ușor de a converti un RDD în Dataframe este atunci când conține clase de cazuri datorită interfeței SQL Spark. Argumentele transmise claselor de caz sunt preluate folosind reflecția și devine numele coloanelor tabelului. Secvențe și Arrayuri pot fi definite și în clase de cazuri. RDD care va fi creat folosind clasa de cazuri poate fi implicit convertit în Dataframe folosind metoda 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()

Un vehicul de dateframe este creat și poate fi înregistrat ca un tabel pe baza căruia pot fi executate instrucțiuni sql.

  • Prin specificarea programatică a schemei

Pot exista cazuri în care nu cunoaștem schema în prealabil sau scenarii în care clasele de cazuri nu pot lua mai mult de 22 de câmpuri. În astfel de condiții, folosim abordarea creării programului a schemei. În primul rând, un RDD de rânduri este creat din RDD original, adică convertirea obiectului rdd de la rdd (t) la rdd (rând). Apoi creați o schemă folosind obiectele StructType (tabel) și StructField (câmp). Această schemă este aplicată la RDD de rânduri folosind metoda createDataFrame, care seamănă cu structura rdd (rând) creată anterior.

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. Prin intermediul surselor de date

Spark permite crearea de cadre de date prin mai multe surse, cum ar fi fișiere de tip hive, json, parchet, csv și text, care pot fi, de asemenea, utilizate pentru a crea cadre de date.

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

Operațiuni DataFrame

Deoarece datele sunt stocate într-un format tabular împreună cu schema, există o serie de operațiuni care pot fi efectuate pe cadrele de date. Permite mai multe operații care pot fi efectuate pe date în cadre de date.

Considerați fișierul este un cadru de date care a fost creat dintr-un fișier csv cu două coloane - FullName și AgePerPA

  1. printSchema () - Pentru a vizualiza structura schemei

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

  1. select- Similar pentru a selecta instrucțiunea în SQL, prezintă datele așa cum se menționează în instrucțiunea select.

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

  1. Filter- Pentru a vizualiza datele filtrate din cadrul de date. Condiția menționată în comandă

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

  1. GroupBy- Pentru gruparea valorilor

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

  1. show () - pentru a afișa conținutul cadrului de date

file.show()

limitări

Cu toate că, cu cadre de date, puteți surprinde erori de sintaxă sql la timpul de compilare în sine, nu este capabil să gestioneze nicio eroare legată de analiză până la timpul de rulare. De exemplu, în cazul în care un nume de coloană care nu există este codat în cod, acesta nu va fi observat până la execuție. Acest lucru ar duce la pierderea timpului și a costurilor proiectului.

Concluzie - Spark SQL Dataframe

Acest articol oferă o imagine de ansamblu (nevoie, creare, limitări) despre API-ul cadrului de date al Spark SQL. Datorită popularității API-urilor de dateframe, Spark SQL rămâne una dintre bibliotecile utilizate pe scară largă. La fel ca un RDD, oferă funcții precum toleranța la erori, evaluarea leneșă, procesarea în memorie, împreună cu unele avantaje suplimentare. Poate fi definit ca date distribuite prin cluster într-o formă tabulară. Astfel, un cadru de date va avea o schemă asociată și poate fi creat prin mai multe surse prin intermediul obiectului de sesiune scânteie.

Articole recomandate

Acesta este un ghid pentru Spark SQL Dataframe. Aici discutăm modalitățile de creare a unui cadru de date cu operațiunile și limitările DataFrame. De asemenea, puteți consulta articolul următor pentru a afla mai multe -

  1. Comandele Spark Shell
  2. Cursori în SQL
  3. Limitările SQL
  4. Baza de date în SQL
  5. Tipuri de uniri în Spark SQL (Exemple)
  6. Ghid pentru lista de comenzi Unix Shell

Categorie: