Pyspark Explode and Explode_outer

Pyspark Explode and Explode_outer
En Python, Pyspark es un módulo Spark utilizado para proporcionar un tipo similar de procesamiento como Spark usando DataFrame. Proporciona el Structtype () y Structfield () Métodos que se utilizan para definir las columnas en Pyspark DataFrame.

Al usar estos métodos, podemos definir los nombres de la columna y los tipos de datos de las columnas.

Structtype ()

Este método se utiliza para definir la estructura del marco de datos de Pyspark. Aceptará una lista de tipos de datos junto con los nombres de columnas para el marco de datos dado. Esto se conoce como el esquema del DataFrame. Almacena una colección de campos

Structfield ()

Este método se usa dentro del Structtype () Método de Pyspark DataFrame. Aceptará nombres de columnas con el tipo de datos.

ArrayType ()

Este método se utiliza para definir la estructura de matriz del marco de datos de Pyspark. Aceptará una lista de tipos de datos. Almacena una colección de campos. Podemos colocar los tipos de datos en el interior ArrayType (). En este artículo, tenemos que crear un marco de datos con una matriz.

Creemos un marco de datos con 2 columnas. La primera columna es estudiante_categoría que se refiere al campo entero para almacenar identificaciones de estudiante. La segunda columna - student_full_name se usa para almacenar valores de cadena en una matriz creada usando ArrayType ().

#Importa el módulo Pyspark
importar pyspark
#Import Sparksession para crear una sesión
de Pyspark.SQL Import Sparksession
#y importar tipos de estructura y otros tipos de datos
de Pyspark.sql.tipos import structtType, structfield, stringType, integertype, floattype, arraytype
de Pyspark.sql.Funciones importar array_contains
#cree una aplicación llamada Linuxhint
Spark_app = Sparksession.constructor.AppName ('Linuxhint').getorcreate ()
# Considere una matriz con 5 elementos
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']), (( 4, ['k']),
(3, ['B', 'P'])]
#Define el structtype y structfields
#para los datos anteriores
schema = structType ([structfield ("student_category", integertype ()), structfield ("student_full_name", arrayType (stringType ())]))
#Cree el DataFrame y agregue esquema a DataFrame
DF = Spark_App.creatataframe (my_array_data, esquema = esquema)
df.espectáculo()

Producción:

explotar()

Ahora veremos que explotar() hace. explotar() devolverá todos y cada uno de los valores individuales de una matriz. Si la matriz está vacía o nula, se ignorará y irá a la siguiente matriz en una columna de tipo de matriz en Pyspark DataFrame. Esto es posible usando el seleccionar() método. Dentro de este método, podemos usar el array_min () Funcionar y devolver el resultado.

Sintaxis:

marco de datos.SELECT (explotar (array_column))

Parámetros:
- array_column: contiene valores de tipo de matriz
Devolver:
- Devolverá todos los valores en una matriz en todas las filas en una columna de tipo de matriz en un marco de datos de Pyspark.

Ejemplo 1:

En este ejemplo, devolveremos todos los valores en una matriz de la columna Student_Full_Name.

#Importa el módulo Pyspark
importar pyspark
#Import Sparksession para crear una sesión
de Pyspark.SQL Import Sparksession
#y importar tipos de estructura y otros tipos de datos
de Pyspark.sql.tipos import structtType, structfield, stringType, integertype, floattype, arraytype
de Pyspark.sql.Importación de funciones *
#cree una aplicación llamada Linuxhint
Spark_app = Sparksession.constructor.AppName ('Linuxhint').getorcreate ()
# Considere una matriz con 5 elementos
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']),
(4, ['k']), (3, ['b', 'p'])]
#Define el structtype y structfields
#para los datos anteriores
schema = structType ([structfield ("student_category", integertype ()), structfield ("student_full_name", arrayType (stringType ())]))
#Cree el DataFrame y agregue esquema a DataFrame
DF = Spark_App.creatataframe (my_array_data, esquema = esquema)
# Aplicar explotar en la columna de student_full_name
df.SELECT ("Student_full_Name", Explode ('student_full_name')).espectáculo()

Producción:

Podemos ver que en la segunda columna, cada valor en la matriz desde cada fila se devuelve.

Ahora, veamos qué pasa si los valores de matriz están vacíos.

Ejemplo 2:

Este marco de datos no tiene valores en la matriz.

#Importa el módulo Pyspark
importar pyspark
#Import Sparksession para crear una sesión
de Pyspark.SQL Import Sparksession
#y importar tipos de estructura y otros tipos de datos
de Pyspark.sql.tipos import structtType, structfield, stringType, integertype, floattype, arraytype
de Pyspark.sql.Importación de funciones *
#cree una aplicación llamada Linuxhint
Spark_app = Sparksession.constructor.AppName ('Linuxhint').getorcreate ()
# Considere una matriz con 5 elementos
my_array_data = [(1, []), (2, []), (3, []), (4, []), (3, [])]
#Define el structtype y structfields
#para los datos anteriores
schema = structType ([structfield ("student_category", integertype ()), structfield ("student_full_name", arrayType (stringType ())]))
#Cree el DataFrame y agregue esquema a DataFrame
DF = Spark_App.creatataframe (my_array_data, esquema = esquema)
# Explota la columna Student_Full_Name
df.SELECT ("Student_full_Name", Explode ('student_full_name')).espectáculo()

Producción:

No devuelve nada ya que faltan todos los valores en la columna de matriz - student_full_name.

Explode_outer ()

Ahora veremos que Explode_outer () hace. Explode_outer () devolverá todos y cada uno de los valores individuales de una matriz. Si la matriz está vacía o nula, devuelve nulo y vaya a la siguiente matriz en una columna de tipo de matriz en Pyspark DataFrame. Esto es posible usando el seleccionar() método. Dentro de este método, podemos usar el array_min () Funcionar y devolver el resultado.

Sintaxis:

marco de datos.SELECT (Explode_outer (Array_Column))

Parámetros:
- array_column: contiene valores de tipo de matriz

Devolver:
- Devolverá todos los valores en una matriz en todas las filas en una columna de tipo de matriz en un marco de datos de Pyspark.

La diferencia entre explotar() y Explode_outer () es eso, explotar() no devolverá nada cuando no hay valores en la matriz. Pero Explode_outer () devolver nulo cuando no hay valores en la matriz.

Ejemplo 1:

En este ejemplo, devolveremos todos los valores en una matriz de la columna Student_Full_Name.

#Importa el módulo Pyspark
importar pyspark
#Import Sparksession para crear una sesión
de Pyspark.SQL Import Sparksession
#y importar tipos de estructura y otros tipos de datos
de Pyspark.sql.tipos import structtType, structfield, stringType, integertype, floattype, arraytype
de Pyspark.sql.Importación de funciones *
#cree una aplicación llamada Linuxhint
Spark_app = Sparksession.constructor.AppName ('Linuxhint').getorcreate ()
# Considere una matriz con 5 elementos
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']),
(4, ['k']), (3, ['b', 'p'])]
#Define el structtype y structfields
#para los datos anteriores
schema = structType ([structfield ("student_category", integertype ()), structfield ("student_full_name", arrayType (stringType ())]))
#Cree el DataFrame y agregue esquema a DataFrame
DF = Spark_App.creatataframe (my_array_data, esquema = esquema)
# Aplicar Explode_outer en la columna Student_Full_Name
df.SELECT ("Student_full_Name", Explode_outer ('student_full_name')).espectáculo()

Producción:

Ahora, veamos qué pasa si los valores de matriz están vacíos.

Ejemplo 2:

Este marco de datos no tiene valores en la matriz.

#Importa el módulo Pyspark
importar pyspark
#Import Sparksession para crear una sesión
de Pyspark.SQL Import Sparksession
#y importar tipos de estructura y otros tipos de datos
de Pyspark.sql.tipos import structtType, structfield, stringType, integertype, floattype, arraytype
de Pyspark.sql.Importación de funciones *
#cree una aplicación llamada Linuxhint
Spark_app = Sparksession.constructor.AppName ('Linuxhint').getorcreate ()
# Considere una matriz con 5 elementos
my_array_data = [(1, []), (2, []), (3, []), (4, []), (3, [])]
#Define el structtype y structfields
#para los datos anteriores
schema = structType ([structfield ("student_category", integertype ()), structfield ("student_full_name", arrayType (stringType ())]))
#Cree el DataFrame y agregue esquema a DataFrame
DF = Spark_App.creatataframe (my_array_data, esquema = esquema)
# Aplicar Explode_outer la columna student_full_name
df.SELECT ("Student_full_Name", Explode_outer ('student_full_name')).espectáculo()

Producción:

Devuelve nulo en todas las filas ya que todos los valores faltan en la columna de matriz: estudiante_full_name.

Conclusión

En este artículo, discutimos explotar() y Explode_outer () Aplicada en la columna de tipo de matriz en DataFrame con dos ejemplos diferentes. explotar() y Explode_outer () realizará alguna acción cuando todos los valores en la matriz no sean nulos. Si algún valor en una matriz es nulo, explotar() ignorará que el valor nulo. Pero Explode_outer () considerará y devolverá el valor nulo donde sea que el valor nulo esté presente en la matriz.