Heim >Backend-Entwicklung >Python-Tutorial >Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

高洛峰
高洛峰Original
2016-11-18 09:25:532263Durchsuche

Datenanalyse und maschinelles Lernen

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Big Data basiert im Wesentlichen auf dem Ökosystem des Hadoop-Systems, bei dem es sich eigentlich um eine Java-Umgebung handelt. Viele Leute verwenden Python und R gerne für die Datenanalyse, dies entspricht jedoch häufig einigen kleinen Datenproblemen oder lokalen Datenverarbeitungsproblemen. Wie kann man beides kombinieren, um einen größeren Wert zu erzielen? Das vorhandene Hadoop-Ökosystem und die vorhandene Python-Umgebung sind in der obigen Abbildung dargestellt.

MaxCompute

MaxCompute ist eine Big-Data-Plattform für Offline-Computing, die Datenverarbeitung auf TB/PB-Ebene, Mandantenfähigkeit, sofort einsatzbereite Nutzung und Isolationsmechanismen zur Gewährleistung der Sicherheit bietet . Das wichtigste Analysetool von MaxCompute ist SQL. Es ist sehr einfach, benutzerfreundlich und anschaulich. Tunnel bietet einen Daten-Upload- und Download-Kanal, ohne dass eine Planung durch die SQL-Engine erforderlich ist.

Pandas

Pandas ist ein auf Numpy basierendes Datenanalysetool, das eine Reihe von Zeichen-APIs bereitstellt. Es ist sehr einfach um mit der Python-Bibliothek zu interagieren.

PyODPS-Architektur

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

PyODPS verwendet Python für die Big-Data-Analyse, und seine Architektur ist in der Abbildung oben dargestellt. Die unterste Ebene ist die Basis-API, mit der Tabellen, Funktionen oder Ressourcen auf MaxCompute betrieben werden können. Das obige DataFrame-Framework besteht aus zwei Teilen. Ein Teil ist das Frontend, das eine Reihe von Ausdrucksoperationen definiert. Der vom Benutzer geschriebene Code wird in einen Ausdrucksbaum umgewandelt, der dem einer gewöhnlichen Sprache entspricht. Benutzer können Funktionen anpassen, Bibliotheken von Drittanbietern visualisieren und mit ihnen interagieren. Unten im Backend befindet sich der Optimierer, der zur Optimierung des Ausdrucksbaums verwendet wird. ODPS und Pandas werden zur Ausführung durch Compiler und Analysator an Engine übermittelt.

Hintergrund

Warum ein DataFrame-Framework erstellen?

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Bei jedem Big-Data-Analysetool gibt es Probleme in drei Dimensionen: Ausdruck Sind die API, die Syntax und die Programmiersprache einfach und intuitiv? Sind die Engine und die Rechenleistung ausreichend? Sie stehen vor zwei Möglichkeiten: Pandas und SQL.

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Wie in der Abbildung oben gezeigt, ist Pandas sehr ausdrucksstark, seine Daten können jedoch nur im Speicher abgelegt werden. Die Engine ist eine eigenständige Maschine und ist durch die begrenzt Leistung der Maschine. Die Ausdruckskraft von SQL ist begrenzt, aber es kann für große Datenmengen verwendet werden. Wenn die Datenmenge klein ist, bietet die Engine keine Vorteile . Das Ziel von ODPS ist es, die Vorteile beider zu kombinieren.

PyODPS DataFrame

PyODPS DataFrame ist in der Python-Sprache geschrieben und Sie können Python-Variablen, bedingte Beurteilungen und Schleifen verwenden. Sie können die Pandas-ähnliche Syntax verwenden, um Ihren eigenen Satz von Frontends für eine bessere Ausdruckskraft zu definieren. Das Backend kann die spezifische Ausführungs-Engine basierend auf der Datenquelle bestimmen, die das Designmuster des Besuchers darstellt und erweiterbar ist. Die gesamte Ausführung ist verzögert und wird nicht direkt ausgeführt, es sei denn, der Benutzer ruft eine Methode auf, die sofort ausgeführt wird.

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Wie Sie auf dem Bild oben sehen können, ist die Syntax der von Pandas sehr ähnlich.

Ausdrücke und abstrakte Syntaxbäume

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Wie aus der obigen Abbildung ersichtlich ist, führt der Benutzer die GroupBy-Operation aus einer ursprünglichen Sammlung aus und führt dann die Spaltenauswahl durch .Operation, unten ist die Sammlung der Quelle. Es werden zwei Felder, Arten, verwendet. Diese beiden Felder werden von der By-Operation ausgeführt, und pental_length wird für die Aggregationsoperation verwendet, um den Aggregatwert zu erhalten. Das Feld „Arten“ wird direkt herausgenommen und das kürzeste Feld um eins hinzugefügt.

Optimierer (Vorgangszusammenführung)

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Das Backend verwendet zuerst den Optimierer, um den Ausdrucksbaum zu optimieren, führt zuerst GroupBy durch und führt dann die Spaltenauswahl darauf aus. Durch das Zusammenführen von Operationen kann petal_length für die Aggregationsoperation entfernt und eine hinzugefügt werden, um schließlich eine GroupBy-Sammlung zu bilden.

Optimierer (Spaltenbeschneidung)

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Wenn der Benutzer zwei Datenrahmen verbindet und dann zwei Spalten aus den Datenrahmen abruft und diese an eine Big-Data-Umgebung übermittelt werden, ist ein solcher Prozess sehr ineffizient, da nicht jede Spalte verwendet wird. Daher müssen die untereinander verbundenen Spalten beschnitten werden. Beispielsweise verwenden wir nur ein Feld in Datenrahmen1. Wir müssen nur das Feld abfangen und eine Projektion erstellen, um eine neue Sammlung zu bilden. Dasselbe gilt für Datenrahmen2. Auf diese Weise kann die Menge der ausgegebenen Daten bei der Durchführung von Verifizierungsvorgängen für diese beiden Teile erheblich reduziert werden.

Optimierer (Prädikat-Push-Down)

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Wenn zwei Datenrahmen verbunden und dann separat gefiltert werden, sollte dieser Filtervorgang nach unten verschoben werden. Folgendes wird implementiert , sodass die Menge der zusammengefügten Eingaben reduziert werden kann.

Visualisierung

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

bietet visualize(), um die Benutzervisualisierung zu erleichtern. Wie Sie im Beispiel rechts sehen können, wird das ODSP-SQL-Backend zu einer SQL-Ausführung kompiliert.

Backend

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Wie Sie der obigen Abbildung entnehmen können, ist das Computer-Backend sehr flexibel. Benutzer können sogar einem Pandas-Datenrahmen beitreten und Daten aus einer vorherigen Tabelle maxcomputen.

Analyzer

Die Rolle des Analysators besteht darin, einige Vorgänge für bestimmte Backends zu konvertieren. Beispiel:

Einige Vorgänge wie value_counts werden von Pandas selbst unterstützt, sodass für das Pandas-Backend keine Verarbeitung erforderlich ist. Für das ODPS-SQL-Backend ist keine direkte Operation erforderlich, sodass es neu geschrieben wird wenn der Analysator ausgeführt wird.

Es gibt auch einige Operatoren, die beim Kompilieren in ODPS SQL nicht vervollständigt werden können und in benutzerdefinierte Funktionen umgeschrieben werden.

ODPS SQL-Backend

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Wie führt das ODPS SQL-Backend die SQL-Kompilierung und anschließende Ausführung durch? Der Compiler kann den Ausdrucksbaum von oben nach unten durchlaufen, Suchen Beitreten oder vereinen. Kompilieren Sie Unterprozesse rekursiv. Wenn es um die Engine für die spezifische Ausführung geht, wird der Analysator verwendet, um den Ausdrucksbaum neu zu schreiben, den Top-Down-Unterprozess zu kompilieren und ihn von unten nach oben in SQL-Klauseln zu kompilieren. Schließlich wird die vollständige SQL-Anweisung erhalten, die SQL übermittelt werden und die Aufgabe wird zurückgegeben.

Pandas-Backend

Zuerst auf den Ausdrucksbaum zugreifen und dann die Pandas-Operation für jeden Ausdrucksbaumknoten ausführen. Nachdem der gesamte Ausdrucksbaum durchlaufen wurde, wird ein DAG gebildet. Die Engine-Ausführung wird in der Reihenfolge der DAG-Topologie ausgeführt, wendet sie kontinuierlich auf Pandas-Vorgänge an und erhält schließlich ein Ergebnis. In Big-Data-Umgebungen besteht die Rolle des Pandas-Backends darin, lokales DEBUG durchzuführen. Wenn die Datenmenge klein ist, können wir Pandas für Berechnungen verwenden.

Schwierigkeiten und Fallstricke

Back-End-Kompilierungsfehler können leicht dazu führen, dass der Kontext verloren geht. Mehrere Optimierungen und Analysen machen es schwierig herauszufinden, welcher vorherige Besuchsknoten das Problem verursacht hat. Lösung: Stellen Sie die Unabhängigkeit jedes Moduls sicher und führen Sie Tests durch.

Bytecode-Kompatibilitätsprobleme, maxcompute unterstützt nur die Ausführung benutzerdefinierter Funktionen in Python 2.7;

SQL-Ausführungsreihenfolge.

ML Machine Learning

Python-Big-Data-Computing-Plattform, Aufbau der PyODPS-Architektur

Machine Learning ist die Eingabe und Ausgabe eines Datenrahmens. Wenn beispielsweise ein Iris-Datenrahmen vorhanden ist, verwenden Sie zunächst das Namensfeld, um ein Klassifizierungsfeld zu erstellen, und rufen Sie die Split-Methode auf, um es in 60 % Trainingsdaten und 40 % Testdaten aufzuteilen. Initialisieren Sie dann ein RandomForests mit einem Entscheidungsbaum darin, rufen Sie die Train-Methode auf, um die Trainingsdaten zu trainieren, rufen Sie die Predict-Methode auf, um Vorhersagedaten zu erstellen, und rufen Sie segmente[0] auf, um die visuellen Ergebnisse anzuzeigen.

Zukunftspläne

Distributed Numpy, DataFrame basiert auf dem Distributed Numpy Backend;

In-Memory Computing zur Verbesserung des interaktiven Erlebnisses;

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Python-WörterbuchoperationenNächster Artikel:Python-Wörterbuchoperationen