In diesem Blog, Wir werden lernen, die am häufigsten gestellte Frage zum Spark-Interview zu beantworten. Ich könnte sagen, 90 Prozent der Menschen begegnen dieser Frage in ihren Interviews, dh Was ist der Hauptunterschied zwischen Map und flatMap in Spark? in einigen Fällen werden die Leute gebeten, einen Code zu schreiben, um das Arbeitsprinzip von Map vs flatMap zu veranschaulichen. Wenn Sie Anfänger in BigData sind und einen kurzen Blick auf die PySpark-Programmierung benötigen, würde ich Ihnen empfehlen, zu lesen, wie man Word Count in Spark schreibt.Lassen Sie uns lernen, diese Frage mit einem einfachen Echtzeitbeispiel zu beantworten.
Apache Spark bietet eine grundlegende Operation, die auf dem Basis-Build-Block des Spark-Kerns namens RDD ausgeführt wird. Diese Operationen sind nichts anderes als die Funktionen oder Methoden mit einer gewissen Logik, um die RDD zu transformieren und die erwartete Ausgabe davon zu erhalten. Es kann eine einfache Logik sein, die Gesamtergebnisse zu filtern oder zu sortieren oder zusammenzufassen. Die Operationen, die auf unserer Spark-RDD ausgeführt werden, können in zwei Typen eingeteilt werden,

      • Transformation
      • Aktionen

Was ist Transformation?

Spark-Transformationen sind der Prozess der Konvertierung oder Transformation der gegebenen Daten-RDD, die unveränderlicher Natur ist, in eine andere Daten-RDD, indem eine Transformationslogik darauf angewendet wird. Wenn Sie weitere Informationen zu Spark RDD benötigen? folgen Sie dem Link, um mehr über Spark RDD zu erfahren. Der wichtigste zu beachtende Punkt ist, dass die Operation nicht sofort ausgeführt wird, wenn wir die Transformation auf eine beliebige RDD in Spark anwenden. Es speichert die Liste der Operationen, die über der Quell-RDD in einer Sequenz ausgeführt werden sollen, indem eine DAG (Directed Acyclic Graph) erstellt wird. Sobald die Spark-Aktion aufgerufen wird, wird die gesamte Transformation in der Sequenz von DAG ausgeführt. Diese Eigenschaft von Spark ist als Spark-Lazy-Ausführung definiert. Wir können mehr über die Transformation, Aktion und spekulative Ausführung in unseren kommenden Kapiteln erfahren. Um nun fortzufahren, sind Transformationen die grundlegende Operation, die über Spark RDD ausgeführt wird, und einige Beispiele für Transformationen sind Map , Flatmap , Filter , Mappartition usw.

Anwendungsfall zu verstehen:

Betrachten wir eine Eingabedatei als Textdatei und sie enthält einen Satz, wie unten gezeigt. Unsere Aufgabe ist es, sowohl die Map- als auch die Flatmap-Transformation nacheinander anzuwenden und die erzielten Ergebnisse zu beobachten, um die Funktionsweise zu verstehen und Kenntnisse darüber zu erlangen, wo Map und Flatmap verwendet werden sollen. Wir tun dies, indem wir die split() -Funktion auf top Map() und flatMap() in PySpark anwenden. Die gleiche Logik kann auch in der Scala- und Java-Programmierung mit geringfügigen Änderungen der Syntax angewendet werden.

Code-Snippet zum Lesen der Textdatei mit SparkSession:

Map-Operation:

Map ist eine Art von Spark-Transformation, die verwendet wird, um Operationen auf der Datensatzebene durchzuführen. Die Spark-Map-Operation wendet die auszuführende Logik an, die durch den benutzerdefinierten Code der Entwickler für jede Sammlung in RDD definiert ist, und stellt die Ergebnisse für jede Zeile als neue Sammlung von RDD bereit.

In einfachen Worten, die Kartentransformation transformiert die Sammlung von RDD mit einer bestimmten Länge, z. B. L, in verarbeitete RDD mit derselben Länge L. Normalerweise bleibt die Anzahl der Datensätze oder Elemente zwischen Eingabe- und Ausgabe-RDD gleich. Jetzt ist es Zeit für einige Hands-on, lassen Sie uns die Map-Operation auf die angegebene Eingabedatei mit Split-Funktion anwenden und die Anzahl der Eingabe- und Ausgabezeilen der erzeugten Datensätze überprüfen.
Codeausschnitt:
#Kartenoperation
map_RDD=input_RDD.karte(lambda x: x.split(‚ ‚))
map_RDD.collect()
Aus:

Aus der Ausgabe geht hervor, dass bei Verwendung der Map-Funktion die Anzahl der Ausgabedatensätze genau mit der Anzahl der an process übergebenen Eingabedatensätze übereinstimmt. Wir können die Anzahl der Datensätze mithilfe der Funktion count () überprüfen, wie im folgenden Diagramm gezeigt. Wir können beobachten, dass sowohl Input als auch Output eine Rekordzahl von 4 haben.

Im realen Word-Szenario wird häufig eine Map-Funktion mit geteilter Logik verwendet, um einen Spark-Datenrahmen für Operationen auf Tabellenebene zu bilden. Um mehr über Datenrahmen zu erfahren, klicken Sie auf diesen Link So erstellen Sie einen Datenrahmen in Spark.

flatMap-Operation:

flatMap in Apache Spark ist eine Transformationsoperation, die zu null oder mehr Elementen für jedes in der Eingabe-RDD vorhandene Element führt. Sie wendet die vom Benutzer erstellte Logik auf die einzelnen Datensätze in der RDD an und gibt die Ausgabedatensätze als neue RDD zurück. Wenn in flatmap() die Eingabe-RDD mit der Länge say L an die benutzerdefinierte Logik übergeben wird, erzeugt sie die Ausgabe-RDD mit unterschiedlicher Länge say M.

Code-Snippet zum Ausführen der Split () -Funktion für die Flatmap () -Transformation ist unten angegeben.
Codeausschnitt:
#flatMap operation
flatmap_RDD=input_RDD.flatMap(lambda x: x.split(‚ ‚))
flatmap_RDD.collect()
Aus:

Wir können beobachten, dass die Anzahl der an flatmap übergebenen Eingabezeilen nicht der Anzahl der erhaltenen Ausgaben entspricht. Durch Anwenden der Funktion count() auf flatmap_rdd können wir die Anzahl der darin enthaltenen Datensätze ermitteln.

Wir können feststellen, dass die Eingabe-RDD 4 Datensätze hat, während die Ausgabe-Flatten-RDD 12 Datensätze hat. Flatmap() wird normalerweise verwendet, um die Anzahl der Wörter abzurufen, die Anzahl der Wörter, die der Sprecher häufig im angegebenen Dokument verwendet, was im Bereich der Textanalyse hilfreich ist.

Vollständiges Programm: