Pyspark explodieren und explode_outer

Pyspark explodieren und explode_outer
In Python ist PySpark ein Spark -Modul, mit dem eine ähnliche Art von Verarbeitung wie Spark mit DataFrame bereitgestellt wird. Es liefert die Strukturtyp () Und Structfield () Methoden, mit denen die Spalten im PYSPARK -Datenrahmen definiert werden.

Durch die Verwendung dieser Methoden können wir die Spaltennamen und die Datentypen der Spalten definieren.

Strukturtyp ()

Diese Methode wird verwendet, um die Struktur des PYSpark -Datenrahmens zu definieren. Es akzeptiert eine Liste von Datentypen zusammen mit Spaltennamen für den angegebenen Datenrahmen. Dies ist als Schema des Datenrahmens bekannt. Es speichert eine Sammlung von Feldern

Structfield ()

Diese Methode wird innerhalb der verwendet Strukturtyp () Methode des PYSPARK -Datenframe. Es akzeptiert Spaltennamen mit dem Datentyp.

ArrayType ()

Diese Methode wird verwendet, um die Array -Struktur des PYSPark -Datenframe zu definieren. Es akzeptiert eine Liste von Datentypen. Es speichert eine Sammlung von Feldern. Wir können Datenatypen darin platzieren ArrayType (). In diesem Artikel müssen wir einen Datenrahmen mit einem Array erstellen.

Erstellen wir einen Datenrahmen mit 2 Spalten. Die erste Spalte ist student_category, die sich auf das Integer -Feld bezieht, um Studenten -IDs zu speichern. Die zweite Spalte - student_full_name wird verwendet, um Stringwerte in einem mit dem verwendeten Array zu speichern ArrayType ().

#Amportieren Sie das PYSPARK -Modul
pysspark importieren
#import SparkSession für die Erstellung einer Sitzung
aus pysspark.SQL Import SparkSession
#und Strukturtypen und andere Datentypen importieren
aus pysspark.sql.Typen importttypen, structfield, StringType, IntegerType, FAUTTYPE, ArrayType
aus pysspark.sql.Funktionen importieren array_contains
#create eine App namens LinuxHint
Spark_app = SparkSession.Erbauer.AppName ('LinuxHint').Getorcreate ()
# Betrachten Sie ein Array mit 5 Elementen
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']), ( 4, ['k']),
(3, ['B', 'P'])]
#Definieren Sie den Struktur- und Strukturen
#Für die obigen Daten
schema = structTtype ([structfield ("student_category", IntegerType ()), structfield ("student_full_name", ArrayType (StringType ())]]))
#Erstellen Sie den Datenrahmen und fügen Sie dem DataFrame Schema hinzu
df = spark_app.erstellteataframe (my_array_data, schema = schema)
df.zeigen()

Ausgang:

explodieren()

Jetzt werden wir sehen, was explodieren() tut. explodieren() Gibt jeden einzelnen Wert aus einem Array zurück. Wenn das Array leer oder null ist, ignoriert es und wechselt zum nächsten Array in einer Array -Spalte in PYSPARK -Datenframe. Dies ist möglich mit dem wählen() Methode. In dieser Methode können wir die verwenden array_min () Funktion und geben Sie das Ergebnis zurück.

Syntax:

Datenrahmen.select (explode (array_column))

Parameter:
- Array_Column: Enthält Array -Typ -Werte
Zurückkehren:
- Es wird alle Werte in einem Array in allen Zeilen in einer Array -Spalte in einem PYSPARK -Datenrahmen zurückgegeben.

Beispiel 1:

In diesem Beispiel werden wir alle Werte in einem Array aus der Spalte student_full_name zurückgeben.

#Amportieren Sie das PYSPARK -Modul
pysspark importieren
#import SparkSession für die Erstellung einer Sitzung
aus pysspark.SQL Import SparkSession
#und Strukturtypen und andere Datentypen importieren
aus pysspark.sql.Typen importttypen, structfield, StringType, IntegerType, FAUTTYPE, ArrayType
aus pysspark.sql.Funktionen importieren *
#create eine App namens LinuxHint
Spark_app = SparkSession.Erbauer.AppName ('LinuxHint').Getorcreate ()
# Betrachten Sie ein Array mit 5 Elementen
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']),
(4, ['k']), (3, ['B', 'P']]]]
#Definieren Sie den Struktur- und Strukturen
#Für die obigen Daten
schema = structTtype ([structfield ("student_category", IntegerType ()), structfield ("student_full_name", ArrayType (StringType ())]]))
#Erstellen Sie den Datenrahmen und fügen Sie dem DataFrame Schema hinzu
df = spark_app.erstellteataframe (my_array_data, schema = schema)
# Explode Explode in der Spalte student_full_name
df.select ("student_full_name", explode ('student_full_name')).zeigen()

Ausgang:

Wir können sehen, dass in der 2. Spalte jeder Wert im Array aus jeder Zeile zurückgegeben wird.

Lassen Sie uns nun sehen, was, wenn Array -Werte leer sind.

Beispiel 2:

Dieser Datenrahmen hat keine Werte im Array.

#Amportieren Sie das PYSPARK -Modul
pysspark importieren
#import SparkSession für die Erstellung einer Sitzung
aus pysspark.SQL Import SparkSession
#und Strukturtypen und andere Datentypen importieren
aus pysspark.sql.Typen importttypen, structfield, StringType, IntegerType, FAUTTYPE, ArrayType
aus pysspark.sql.Funktionen importieren *
#create eine App namens LinuxHint
Spark_app = SparkSession.Erbauer.AppName ('LinuxHint').Getorcreate ()
# Betrachten Sie ein Array mit 5 Elementen
my_array_data = [(1, []), (2, []), (3, []), (4, []), (3, [])]
#Definieren Sie den Struktur- und Strukturen
#Für die obigen Daten
schema = structTtype ([structfield ("student_category", IntegerType ()), structfield ("student_full_name", ArrayType (StringType ())]]))
#Erstellen Sie den Datenrahmen und fügen Sie dem DataFrame Schema hinzu
df = spark_app.erstellteataframe (my_array_data, schema = schema)
# Explodieren Sie die Spalte student_full_name
df.select ("student_full_name", explode ('student_full_name')).zeigen()

Ausgang:

Es gibt nichts zurück, da alle Werte in der Spalte Array - student_full_name fehlen.

explode_outer ()

Jetzt werden wir sehen, was explode_outer () tut. explode_outer () Gibt jeden einzelnen Wert aus einem Array zurück. Wenn das Array leer oder null ist, gibt es Null zurück und wechselt zum nächsten Array in einer Array -Spalte im PYSPARK -Datenframe. Dies ist möglich mit dem wählen() Methode. In dieser Methode können wir die verwenden array_min () Funktion und geben Sie das Ergebnis zurück.

Syntax:

Datenrahmen.select (explode_outer (array_column)))

Parameter:
- Array_Column: Enthält Array -Typ -Werte

Zurückkehren:
- Es wird alle Werte in einem Array in allen Zeilen in einer Array -Spalte in einem PYSPARK -Datenrahmen zurückgegeben.

Der Unterschied zwischen explodieren() Und explode_outer () ist das, explodieren() Gibt nichts zurück, wenn es im Array keine Werte gibt. Aber explode_outer () Null zurückgeben, wenn im Array keine Werte vorhanden sind.

Beispiel 1:

In diesem Beispiel werden wir alle Werte in einem Array aus der Spalte student_full_name zurückgeben.

#Amportieren Sie das PYSPARK -Modul
pysspark importieren
#import SparkSession für die Erstellung einer Sitzung
aus pysspark.SQL Import SparkSession
#und Strukturtypen und andere Datentypen importieren
aus pysspark.sql.Typen importttypen, structfield, StringType, IntegerType, FAUTTYPE, ArrayType
aus pysspark.sql.Funktionen importieren *
#create eine App namens LinuxHint
Spark_app = SparkSession.Erbauer.AppName ('LinuxHint').Getorcreate ()
# Betrachten Sie ein Array mit 5 Elementen
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']),
(4, ['k']), (3, ['B', 'P']]]]
#Definieren Sie den Struktur- und Strukturen
#Für die obigen Daten
schema = structTtype ([structfield ("student_category", IntegerType ()), structfield ("student_full_name", ArrayType (StringType ())]]))
#Erstellen Sie den Datenrahmen und fügen Sie dem DataFrame Schema hinzu
df = spark_app.erstellteataframe (my_array_data, schema = schema)
# anwenden explode_outer in der Spalte student_full_name anwenden
df.select ("student_full_name", explode_outer ('student_full_name'))).zeigen()

Ausgang:

Lassen Sie uns nun sehen, was, wenn Array -Werte leer sind.

Beispiel 2:

Dieser Datenrahmen hat keine Werte im Array.

#Amportieren Sie das PYSPARK -Modul
pysspark importieren
#import SparkSession für die Erstellung einer Sitzung
aus pysspark.SQL Import SparkSession
#und Strukturtypen und andere Datentypen importieren
aus pysspark.sql.Typen importttypen, structfield, StringType, IntegerType, FAUTTYPE, ArrayType
aus pysspark.sql.Funktionen importieren *
#create eine App namens LinuxHint
Spark_app = SparkSession.Erbauer.AppName ('LinuxHint').Getorcreate ()
# Betrachten Sie ein Array mit 5 Elementen
my_array_data = [(1, []), (2, []), (3, []), (4, []), (3, [])]
#Definieren Sie den Struktur- und Strukturen
#Für die obigen Daten
schema = structTtype ([structfield ("student_category", IntegerType ()), structfield ("student_full_name", ArrayType (StringType ())]]))
#Erstellen Sie den Datenrahmen und fügen Sie dem DataFrame Schema hinzu
df = spark_app.erstellteataframe (my_array_data, schema = schema)
# anwenden explode_outer die Spalte student_full_name anwenden
df.select ("student_full_name", explode_outer ('student_full_name'))).zeigen()

Ausgang:

Es gibt Null in allen Zeilen zurück, da alle Werte in der Spalte Array-Spalte- student_full_name fehlen.

Abschluss

In diesem Artikel haben wir diskutiert explodieren() Und explode_outer () Auf der Spalte Typ -Typ im DataFrame mit zwei verschiedenen Beispielen angewendet. explodieren() Und explode_outer () führt eine gewisse Aktion aus, wenn alle Werte im Array nicht null sind. Wenn ein Wert in einem Array null ist, explodieren() wird diesen Nullwert ignorieren. Aber explode_outer () wird den Nullwert in Betracht ziehen und zurückgeben, wo immer der Nullwert im Array vorhanden ist.