Klassifizierung von Spark -Operatoren
Aus allgemeiner Sicht können Spark -Operatoren grob in die folgenden zwei Kategorien unterteilt werden:
1) Transformation Transformation/Conversion Operator: Diese Transformation löst nicht die Einreichung des Jobs aus und vervollständigt die Verarbeitung der Zwischenprozesse des Jobs.
Transformationsoperationen sind verzögerte Berechnungen, was bedeutet, dass der Umwandlungsvorgang zur Generierung eines weiteren RDD aus einer RDD -Konvertierung nicht sofort ausgeführt wird. Es erfordert das Warten, bis ein Aktionsvorgang verfügbar ist, bevor der Betrieb ausgelöst wird.
2) Aktionsaktionsbetreiber: Dieser Betreibertyp löst den SparkContext aus, um einen Job zu senden.
Der Aktionsbetreiber löst den Spark Submission Job (Job) aus und gibt die Daten an das Spark -System aus.
Aus einer kleinen Perspektive können Spark -Operatoren grob in die folgenden drei Kategorien unterteilt werden:
1) Transformationsbetreiber des Wertdatentyps. Diese Transformation auslöst nicht die Einreichung des Jobs. Die verarbeiteten Datenelemente sind Mehrwertdaten.
2) Der Transfromationsoperator des Schlüsselwert-Datentyps. Diese Transformation auslöst nicht die Einreichung des Jobs. Die Datenelemente für die Verarbeitung sind Schlüsselwertdatenpaare.
3) Actionbetreiber, dieser Betreibertyp löst den SparkContext aus, um einen Job zu senden.
Einführung
Es ist normalerweise bequemer, Spark -Programme mit Scala zu schreiben, schließlich ist Sparks Quellcode in Scala geschrieben. Derzeit gibt es derzeit viele Java -Entwickler, insbesondere wenn Datendocken und Online -Dienste. Zu diesem Zeitpunkt müssen Sie einige Methoden zur Verwendung von Spark in Java beherrschen.
1. Karte
MAP kann bei der Verarbeitung und Konvertierung von Daten nicht häufiger verwendet werden
Bevor Sie MAP verwenden, müssen Sie zunächst ein transformiertes Funktionsformat wie folgt definieren:
Funktion <String, ordnungspunkt> Transformation = Neue Funktion <String, gekennzeichneter Punkt> () {// String ist der Eingabetyp einer bestimmten Zeile, die gekennzeichnet ist. int rowSize = rowarr.length; double [] doublearr = new Double [rowSize-1]; // Mit Ausnahme des ersten Labels wird der Rest des Teils in ein Doppel analysiert und in das Array für (int i = 1; i <rowSize; i ++) {String jeder = rowarr [i]; Doublearr [i] = double.ParseDouble (jeweils); } // Die Daten, die Sie gerade erhalten haben, in ein Vektor -Vektor -Feature = vectors.Dense (DouBlearr) konvertieren; double label = double.Parsedouble (rowarr [0]); // Konstruieren Sie das Datenformat für Klassifizierungstraining -Dame -DamePoint -DamePoint Point = new DamePoint (Label, Feature); Rückgabepunkt; }};Besondere Aufmerksamkeit sollte an:
1. Die Eingabe der Anrufmethode sollte der Typ der Datenzeile vor der Konvertierung sein. Der Rückgabewert sollte der Typ der Datenzeile nach der Verarbeitung sein.
2. Wenn eine benutzerdefinierte Klasse in der Konvertierungsmethode aufgerufen wird, beachten Sie, dass der Klassenname beispielsweise serialisiert werden muss
öffentliche Klasse TreeenSemble implementiert serialisierbar {}3.. Wenn einige Klassenobjekte in der Konvertierungsfunktion aufgerufen werden, wie z.
Rufen Sie dann die Konvertierungsfunktion gegebenenfalls auf
Javardd <DarledPoint> rdd = oridata.tojavardd (). MAP (Transformation);
Diese Methode erfordert die Umwandlung der gewöhnlichen RDD in Javardd, um sie zu verwenden. Der Betrieb der Konvertierung in Javardd ist nicht zeitaufwändig, also mach dir keine Sorgen
2. Filter
Es wird auch sehr häufig in Szenarien wie der Vermeidung von Datennullwerten und 0s verwendet und kann die Funktionen von WO in SQL erfüllen
Zunächst müssen wir eine Funktion definieren. Der tatsächliche Effekt der Rückgabe eines Booleschen Wertes bei einer Datenzeile besteht darin, die an true zurückgegebenen Daten aufzubewahren.
Funktion <string, boolean> boolfilter = new Function <String, boolean> () {// String ist der Eingangstyp einer bestimmten Zeile. Boolescher ist der entsprechende Ausgangstyp. Wird verwendet, um festzustellen, ob die Daten beibehalten werden. @Override public boolean call (String row) löst Ausnahme aus {// Die Anrufmethode boolean flag = row! = Null; Rückflagge; }};Normalerweise ist das, was in der tatsächlichen Verwendung dieser Funktion geändert werden muss, nur der Typ der Zeile, dh der Eingabetyp der Datenzeile. Im Gegensatz zur oben genannten Konvertierungsfunktion sollte der Rückgabewert dieser Aufrufmethode als boolescher festgelegt werden.
Dann die Anrufmethode
Javardd <darledPoint> rdd = oridata.tojavardd (). Filter (boolfilter);
3.. Maptopair
Diese Methode ähnelt der Kartenmethode und führt auch einige Konvertierungen für die Daten durch. Die Ausgabe dieser Funktion ist jedoch eine Tupeleingangslinie. Die am häufigsten verwendete Methode besteht darin, Kreuzvalidierung oder statistische Fehlerrate-Rückrufberechnung AUC usw. durchzuführen.
In ähnlicher Weise müssen Sie zuerst eine Konvertierungsfunktion definieren
Funktion <string, boolean> Transformator = new pepunction <damedPoint, Object, Object> () {// DamedPoint sind die beiden Objekte nach dem Eingabetyp. Ändern Sie nicht @Override public tuple2 call (gekennzeichnete Punktzeile) Auslese {// Die Aufrufmethode wechselt normalerweise nur die Eingabeparameter und die Ausgabe. Ändern Sie doppelt nicht doppelt prognostiziert = thismodel.PREDICT (row.Features ()); double label = row.label (); Return New Tuple2 (Predicton, Etikett); }});In Bezug auf das anrufende Klassen- und Klassenobjekt stimmen die Anforderungen mit dem vorherigen überein. Die Klasse muss serialisiert werden, und das Klassenobjekt muss als endgültiger Typ deklariert werden
Die entsprechenden Anrufe sind wie folgt:
JavapairRDD <Objekt, Objekt> Vorhersagen undLabels = oridata.Maptopair (Transformator);
Berechnen Sie dann die Genauigkeit, Rückruf, Genauigkeit und AUC für die Verwendung von Vorhersagen und AUC. Es wird im nächsten Blog sein. Bitte bleiben Sie dran.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.