Definition: Spark DataFrame

Spark DataFrames stellen eine Erweiterung der RDD-Datenstruktur dar.

Im Gegensatz zu RDDs ermöglichen DataFrames eine schematische Darstellung der Daten, ähnlich zu relationalen Datenbanken, die sich:

  • in einer vereinfachten high-level API sowie
  • der Unterstützung von SQL-Abfragen

äußert. Das Schema kann entweder durch die Nutzer definiert oder direkt durch den DataFrame inferiert werden.

DataFrames bieten gegenüber RDDs zudem einige Optimierungen, wie z.B. Project Tungsten, um die Ausführungsgeschwindigkeit zu verbessern.

Anmerkung

Beispielhaftes Spark SQL Programm (mit der API)

Als beispielhaftes Spark Programm mit der DataFrame-API, hier die Zählung aller Studierenden nach Fakultät, wobei folgendes CSV gegeben sei:

<data.csv>
 
studentA;Hagen;Psychology
studentB;Frankfurt;Law
studentC;Hagen;Computer Science
studentD;Berlin;Law
...

Lesen, filtern und verarbeiten können wir die Daten nun wie folgt:

# Spark Session starten
spark = SparkSession.builder \
.master("yarn") \
.appName("ApplicationName") \
.getOrCreate() 
 
students = spark.read.csv("path/to/data.csv", header=True, inferSchema=True)
students.show()
 
# | student  | city      | faculty    |
# | -------- | --------- | ---------- |
# | studentA | Hagen     | Psychology |
# | studentB | Frankfurt | Law        |
# | ...      | ...       | ...        |
 
result = students.where(students["city"]=="Hagen") \
                 .groupby("faculty") \
                 .count()
result.show()

Beispielhaftes Spark SQL Programm (mit SQL)

Als beispielhaftes Spark Programm mit der DataFrame-SQL-Syntax, hier die Zählung aller Studierenden nach Fakultät, wobei folgendes CSV gegeben sei:

<data.csv>
 
studentA;Hagen;Psychology
studentB;Frankfurt;Law
studentC;Hagen;Computer Science
studentD;Berlin;Law
...

Lesen, filtern und verarbeiten können wir die Daten nun wie folgt:

# Spark Session starten
spark = SparkSession.builder \
.master("yarn") \
.appName("ApplicationName") \
.getOrCreate() 
 
spark.sql("CREATE TEMP VIEW students \
             USING CSV \
             OPTIONS (path = 'path/to/data.csv', \
                       header = 'True', \
                       inferSchema = 'True')")
                       
result = spark.sql("\
				SELECT faculty, COUNT(faculty) \ 
				FROM students \ 
				WHERE city == 'Hagen' \
				GROUP BY faculty")
 
result.show()