Spark SQL Dataframe

Ein ähnlicher Datenrahmen wie RDD ist eine Abstraktion für strukturierte Daten in der Spark-SQL-Bibliothek. Es handelt sich um eine verteilte Sammlung von Daten, die als Tabelle in einer relationalen Datenbank mit einem angehängten Schema betrachtet werden können. Es kann auch als Sammlung benannter Spalten definiert werden. Spark SQL ist eine der im Spark-Stack verfügbaren Bibliotheken, die Informationen zur Struktur und zur Berechnung der Daten enthält. Diese zusätzlichen Informationen werden zur Durchführung von Optimierungen verwendet. Ein Datenframe enthält die Vorteile von RDD sowie Optimierungstechniken. Diese API ist in Python, R, Scala und Java verfügbar.

Die verschiedenen Quellen, die einen Datenrahmen erzeugen, sind:

  • Bestehende RDD
  • Strukturierte Dateien und Datenbanken
  • Hive-Tabellen

Benötigen Sie von Dataframe

Die Spark-Community hat immer versucht, die Daten zu strukturieren, wobei Spark-SQL-Datenrahmen die Schritte in diese Richtung sind. Die anfängliche API von spark, RDD, ist für unstrukturierte Daten vorgesehen, bei denen sowohl die Berechnungen als auch die Daten undurchsichtig sind. Daher war es erforderlich, eine API zu erstellen, die zusätzliche Optimierungsvorteile bietet. Im Folgenden sind die wenigen Anforderungen aufgeführt, die die Grundlage für

  • Strukturierte und semidaten verarbeiten
  • Mehrere Datenquellen
  • Integration in mehrere Programmiersprachen
  • Die Anzahl der Vorgänge, die mit den Daten ausgeführt werden können, z. B. Auswählen und Filtern.

Wie erstelle ich einen Spark SQL-Datenrahmen?

Bevor Sie die Möglichkeiten zum Erstellen eines Datenrahmens verstehen, müssen Sie ein anderes Konzept kennen, mit dem Spark-Anwendungen Datenrahmen aus verschiedenen Quellen erstellen. Dieses Konzept wird als Funkenbildung bezeichnet und ist der Einstiegspunkt für alle Funkenfunktionen. Früher mussten wir sparkConf, sparkContext oder sqlContext einzeln erstellen, aber mit sparksession werden alle unter einer Sitzung eingekapselt, in der spark als Sparksession-Objekt fungiert.

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

Möglichkeiten zum Erstellen eines Datenrahmens

  1. Aus vorhandener RDD

Es gibt zwei Möglichkeiten, wie ein Dataframe über RDD erstellt werden kann. Eine Möglichkeit ist die Verwendung von Reflection, die das Schema der Daten automatisch ableitet, und der andere Ansatz besteht darin, ein Schema programmgesteuert zu erstellen und dann auf die RDD anzuwenden.

  • Durch Ableiten des Schemas

Eine einfache Möglichkeit, eine RDD in einen Dataframe zu konvertieren, besteht darin, Case-Klassen aufgrund der SQL-Schnittstelle des Spark zu enthalten. Die an die case-Klassen übergebenen Argumente werden mithilfe von Reflection abgerufen und als Name für die Spalten der Tabelle verwendet. Sequenzen und Arrays können auch in Fallklassen definiert werden. Das RDD, das mit der case-Klasse erstellt wird, kann implizit mit der toDF () -Methode in Dataframe konvertiert werden.

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

Ein Datenrahmenfahrzeug wird erstellt und kann als Tabelle registriert werden, für die SQL-Anweisungen ausgeführt werden können.

  • Durch programmgesteuertes Angeben des Schemas

Es kann Fälle geben, in denen uns das Schema vorher nicht bekannt ist, oder Szenarien, in denen Fallklassen nicht mehr als 22 Felder umfassen können. Unter solchen Bedingungen verwenden wir den Ansatz der programmgesteuerten Erstellung des Schemas. Zunächst wird eine RDD von Zeilen aus der ursprünglichen RDD erstellt, dh das rdd-Objekt wird von rdd (t) in rdd (row) konvertiert. Erstellen Sie dann ein Schema mit den Objekten StructType (Table) und StructField (Field). Dieses Schema wird mit der createDataFrame-Methode auf die RDD von Zeilen angewendet, da sie der Struktur von rdd (row) ähnelt, die zuvor erstellt wurde.

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. Durch Datenquellen

Mit Spark können Datenrahmen aus mehreren Quellen erstellt werden, z. B. aus Hive-, Json-, Parkett-, CSV- und Textdateien, die auch zum Erstellen von Datenrahmen verwendet werden können.

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-Vorgänge

Da die Daten zusammen mit dem Schema in einem Tabellenformat gespeichert werden, können eine Reihe von Vorgängen für die Datenrahmen ausgeführt werden. Es ermöglicht mehrere Operationen, die an Daten in Datenrahmen ausgeführt werden können.

Als Datei wird ein Datenframe betrachtet, der aus einer CSV-Datei mit zwei Spalten erstellt wurde - FullName und AgePerPA

  1. printSchema () - Zum Anzeigen der Schemastruktur

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

  1. select- Zeigt ähnlich wie die select-Anweisung in SQL die Daten wie in der select-Anweisung angegeben an.

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

  1. Filter - Zum Anzeigen der gefilterten Daten aus dem Datenrahmen. Die im Befehl erwähnte Bedingung

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

  1. GroupBy - Gruppiert nach den Werten

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

  1. show () - um den Inhalt des Datenrahmens anzuzeigen

file.show()

Einschränkungen

Mit Datenrahmen können Sie SQL-Syntaxfehler zwar zur Kompilierungszeit selbst abfangen, sie können jedoch keine analysebezogenen Fehler bis zur Laufzeit behandeln. Wenn beispielsweise auf einen nicht vorhandenen Spaltennamen im Code verwiesen wird, wird dies erst zur Laufzeit bemerkt. Dies würde zu einer Verschwendung von Zeit und Projektkosten des Entwicklers führen.

Fazit - Spark SQL Dataframe

Dieser Artikel bietet einen Überblick (Bedarf, Erstellung, Einschränkungen) über die Datenrahmen-API von Spark SQL. Aufgrund der Beliebtheit von Dataframe-APIs bleibt Spark SQL eine der am häufigsten verwendeten Bibliotheken. Genau wie ein RDD bietet es Funktionen wie Fehlertoleranz, verzögerte Auswertung, In-Memory-Verarbeitung sowie einige zusätzliche Vorteile. Es kann als Daten definiert werden, die in tabellarischer Form über den Cluster verteilt sind. Somit ist einem Datenrahmen ein Schema zugeordnet, das über mehrere Quellen über ein Funksitzungsobjekt erstellt werden kann.

Empfohlene Artikel

Dies ist eine Anleitung zu Spark SQL Dataframe. Hier werden die Möglichkeiten zum Erstellen eines Datenrahmens mit den DataFrame-Vorgängen und -Einschränkungen erläutert. Sie können auch den folgenden Artikel lesen, um mehr zu erfahren -

  1. Spark-Shell-Befehle
  2. Cursor in SQL
  3. SQL-Einschränkungen
  4. Datenbank in SQL
  5. Arten von Joins in Spark SQL (Beispiele)
  6. Leitfaden zur Liste der Unix-Shell-Befehle

Kategorie: