Freigeben über


PySpark in Azure Databricks

Azure Databricks basiert auf Apache Spark, einem einheitlichen Analysemodul für Big Data und maschinelles Lernen. PySpark bietet Ihnen eine Schnittstelle mit Apache Spark über die Python-Programmiersprache, einer flexiblen Sprache, die einfach erlernt, implementiert und verwaltet werden kann. Es bietet auch viele Optionen für die Datenvisualisierung in Databricks. PySpark kombiniert die Leistungsfähigkeit von Python und Apache Spark.

Dieser Artikel enthält eine Übersicht über die Grundlagen von PySpark in Databricks.

Einführung in Spark-Konzepte

Bevor Sie sich mit PySpark vertraut machen, sollten Sie unbedingt die Schlüsselkonzepte von Apache Spark verstehen.

Dataframes

DataFrames sind die primären Objekte in Apache Spark. Ein DataFrame ist ein Dataset, das in benannten Spalten organisiert ist. Ein DataFrame gleicht einem Tabellenblatt oder einer SQL-Tabelle: Es handelt sich um eine zweidimensionale, beschriftete Datenstruktur aus mehreren Datensätzen (ähnlich Zeilen in einer Tabelle) und Spalten unterschiedlicher Typen. DataFrames bieten zahlreiche Funktionen (z. B. Auswählen von Spalten, Filtern, Verknüpfen und Aggregieren), mit denen Sie gängige Datenbearbeitungs- und analyseaufgaben effizient ausführen können.

Einige wichtige DataFrame-Elemente umfassen:

  • Schema: Ein Schema definiert die Spaltennamen und -typen eines DataFrame. Datenformate weisen unterschiedliche Semantik für die Schemadefinition und -erzwingung auf. Einige Datenquellen stellen Schemainformationen bereit, während andere entweder auf die manuelle Schemadefinition angewiesen sind oder Schemarückschlüsse zulassen. Benutzer können Schemas manuell definieren oder Schemas aus einer Datenquelle lesen lassen.
  • Zeilen: Spark stellt Datensätze in einem DataFrame als Row-Objekte dar. Während zugrunde liegende Datenformate wie Delta Lake Daten in Spalten speichern, werden Daten in Spark zu Optimierungszwecken mithilfe von Zeilen zwischengespeichert und neu angeordnet.
  • Spalten: In Spark ähneln Spalten denen in einem Tabellenblatt und können einen einfachen Typ wie eine Zeichenfolge oder ganze Zahl, aber auch komplexe Typen wie einen Array, eine Zuordnung oder NULL darstellen. Sie können Abfragen schreiben, die Spalten aus einer Datenquelle auswählen, bearbeiten oder entfernen. Mögliche Datenquellen sind Tabellen, Sichten, Dateien oder andere DataFrames. Spalten werden niemals aus Datasets oder DataFrames entfernt. Sie werden nur mithilfe von .drop-Transformationen aus den Ergebnissen weggelassen oder Auslassungen in select-Anweisungen.

Datenverarbeitung

Apache Spark verwendet die verzögerte Auswertung, um Transformationen und Aktionen zu verarbeiten, die mit DataFrames definiert wurde. Diese Konzepte sind grundlegend für das Verständnis der Datenverarbeitung mit Spark.

Transformationen: In Spark wird die Verarbeitungslogik in Form von Transformationen ausgedrückt. Dabei handelt es sich um Anweisungen zum Laden und Bearbeiten von Daten mithilfe von DataFrames. Gängige Transformationen sind das Lesen von Daten, Joins, Aggregationen und Typumwandlungen. Informationen zu Transformationen in Azure Databricks finden Sie unter Transformieren von Daten.

Verzögerte Auswertung: Spark optimiert die Datenverarbeitung, indem der effizienteste physische Plan für die Auswertung der in Transformationen angegebenen Logik ermittelt wird. Spark reagiert jedoch erst dann auf Transformationen, wenn Aktionen aufgerufen werden. Anstatt jede Transformation genau in der angegebenen Reihenfolge auszuwerten, wird in Spark gewartet, bis eine Aktion die Berechnung aller Transformationen auslöst. Dies wird als verzögerte Auswertung oder verzögertes Laden bezeichnet und ermöglicht es Ihnen, mehrere Vorgänge zu verketten, da Spark ihre Ausführung verzögert verarbeitet, anstatt sie sofort beim Definieren auszuführen.

Hinweis

Die verzögerte Auswertung bedeutet, dass DataFrames logische Abfragen als Anweisungen für eine Datenquelle statt als In-Memory-Ergebnis speichern. Dies unterscheidet drastisch von der sofortigen Ausführung, dem von pandas-DataFrames verwendeten Modell.

Aktionen: Aktionen weisen Spark an, ein Ergebnis aus mehreren Transformationen in mindestens einem DataFrame zu berechnen. Aktionsvorgänge geben einen Wert zurück. Dabei gibt es folgende Aktionsvorgänge:

  • Aktionen zum Ausgeben von Daten in der Konsole oder Ihrem Editor, z. B. display oder show
  • Aktionen zum Erfassen von Daten (gibt Row-Objekte zurück), z. B. take(n) sowie first oder head
  • Aktionen zum Schreiben in Datenquellen, z. B. saveAsTable
  • Aggregationen, die eine Berechnung auslösen, z. B. count

Wichtig

In Produktionsdatenpipelines ist das Schreiben von Daten in der Regel die einzige Aktion, die vorhanden sein sollte. Alle anderen Aktionen unterbrechen die Abfrageoptimierung und können zu Engpässen führen.

Was hat es mit der Unveränderlichkeit von DataFrames auf sich?

DataFrames bestehen aus Transformationen und Aktionen, die für mindestens eine Datenquelle definiert sind. In Apache Spark werden Abfragen letztendlich jedoch bis zur ursprünglichen Datenquelle aufgelöst, sodass weder die Daten selbst noch die DataFrames geändert werden. Dies bedeutet mit anderen Worten, dass DataFrames unveränderlich sind. Aus diesem Grund wird nach der Ausführung von Transformationen ein neuer DataFrame zurückgegeben, der in einer Variablen gespeichert werden muss, auf die in nachfolgenden Vorgängen zugegriffen wird. Wenn Sie einen Zwischenschritt Ihrer Transformation auswerten möchten, müssen Sie eine Aktion aufrufen.

APIs und Bibliotheken

Wie bei allen APIs für Spark verfügt PySpark über viele APIs und Bibliotheken, die leistungsstarke Funktionen ermöglichen und unterstützen, darunter:

  • Verarbeitung strukturierter Daten mit relationalen Abfragen mithilfe von Spark SQL und DataFrames. Mit Spark SQL können Sie SQL-Abfragen mit Spark-Programmen kombinieren. Mit Spark DataFrames können Sie Daten mithilfe von Python und SQL effizient lesen, schreiben, transformieren und analysieren, sodass Sie immer die volle Leistungsfähigkeit von Spark nutzen. Siehe Erste Schritte mit PySpark.
  • Skalierbare Verarbeitung von Datenströmen mit dem strukturierten Streaming. Sie können Ihre Streamingberechnung auf die gleiche Weise ausdrücken, wie Sie eine Batchberechnung für statische Daten ausdrücken würden, und das Spark SQL-Modul führt sie inkrementell und kontinuierlich aus, während Streamingdaten eingehen. Siehe Strukturiertes Streaming: Übersicht.
  • Pandas-Datenstrukturen und -Datenanalysetools, die mit der Pandas-API in Spark für Apache Spark verwendet werden können. Die Pandas-API in Spark ermöglicht es Ihnen, Ihre Pandas-Workload auf eine beliebige Größe zu skalieren, indem sie über mehrere Knoten verteilt wird, und zwar mit einer einzigen Codebasis, die mit Pandas (Tests, kleinere Datasets) und mit Spark (Produktion, verteilte Datasets) funktioniert. Siehe Pandas-API in Spark: Übersicht.
  • Algorithmen für maschinelles Lernen mit Machine Learning (MLLib). MLlib ist eine skalierbare Machine Learning-Bibliothek, die auf Spark basiert und einen einheitlichen Satz von APIs bereitstellt, mit denen Benutzer praktische Machine Learning-Pipelines erstellen und optimieren können. Siehe Machine Learning-Bibliothek: Übersicht.
  • Graphen und Graph-parallele Berechnung mit GraphX. GraphX führt ein neues gerichtetes Multigraph mit Eigenschaften ein, die an jedem Scheitelpunkt und jeder Kante angefügt sind, und macht Graph-Berechnungsoperatoren, Algorithmen und Generatoren verfügbar, um Graph-Analyseaufgaben zu vereinfachen. Siehe GraphX: Übersicht.

Spark-Tutorials

Verwendungsbeispiele für PySpark in Databricks finden Sie in den folgenden Artikeln:

In der Dokumentation zu Apache Spark finden Sie zudem Schnellstarts und Leitfäden für den Einstieg, einschließlich der folgenden:

PySpark-Referenz

Azure Databricks verwaltet eine eigene Version der PySpark-APIs und entsprechende Referenzen, die in den folgenden Abschnitten zu finden sind: