Pyspark explodir e explodir_outer

Pyspark explodir e explodir_outer
No Python, Pyspark é um módulo Spark usado para fornecer um tipo semelhante de processamento como o Spark usando o DataFrame. Fornece o Structype () e Structfield () Métodos que são usados ​​para definir as colunas no quadro de dados Pyspark.

Ao usar esses métodos, podemos definir os nomes das colunas e os tipos de dados das colunas.

Structype ()

Este método é usado para definir a estrutura do quadro de dados Pyspark. Ele aceitará uma lista de tipos de dados, juntamente com nomes de colunas para o DataFrame especificado. Isso é conhecido como o esquema do DataFrame. Ele armazena uma coleção de campos

Structfield ()

Este método é usado dentro do Structype () Método do quadro de dados Pyspark. Ele aceitará nomes de colunas com o tipo de dados.

ArrayType ()

Este método é usado para definir a estrutura da matriz do quadro de dados Pyspark. Ele aceitará uma lista de tipos de dados. Ele armazena uma coleção de campos. Podemos colocar tipos de dados dentro ArrayType (). Neste artigo, temos que criar um quadro de dados com uma matriz.

Vamos criar um quadro de dados com 2 colunas. A primeira coluna é Student_category, que se refere ao campo inteiro para armazenar IDs de estudante. A segunda coluna - student_full_name é usada para armazenar valores de string em uma matriz criada usando ArrayType ().

#import o módulo Pyspark
Importar Pyspark
#Import SparkSession para criar uma sessão
de Pyspark.SQL Import SparkSession
#e importar tipos de estrutura e outros tipos de dados
de Pyspark.SQL.Tipos de importação estruttype, structfield, stringtype, integertype, floottype, ArrayType
de Pyspark.SQL.Funções Importar Array_Contains
#Crie um aplicativo chamado Linuxhint
Spark_App = SparkSession.construtor.AppName ('Linuxhint').getorcreate ()
# Considere uma matriz com 5 elementos
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']), ( 4, ['k']),
(3, ['B', 'P']]]]
#Define o StructType e Structfields
#para os dados acima
esquema = structtype ([structfield ("student_category", integertype ()), structfield ("student_full_name", arraytype (stringtype ())))))
#Crie o DataFrame e adicione esquema ao DataFrame
df = spark_app.Createdataframe (my_array_data, esquema = esquema)
df.mostrar()

Saída:

explodir()

Agora, veremos o que explodir() faz. explodir() retornará cada valor individual de uma matriz. Se a matriz estiver vazia ou nula, ela ignorará e irá para a próxima matriz em uma coluna do tipo de matriz no Pyspark Dataframe. Isso é possível usando o SELECT () método. Dentro deste método, podemos usar o Array_min () função e retorne o resultado.

Sintaxe:

quadro de dados.Selecione (Explode (Array_column))

Parâmetros:
- Array_column: contém valores do tipo de matriz
Retornar:
- Ele retornará todos os valores em uma matriz em todas as linhas em uma coluna do tipo de matriz em um quadro de dados Pyspark.

Exemplo 1:

Neste exemplo, retornaremos todos os valores em uma matriz da coluna student_full_name.

#import o módulo Pyspark
Importar Pyspark
#Import SparkSession para criar uma sessão
de Pyspark.SQL Import SparkSession
#e importar tipos de estrutura e outros tipos de dados
de Pyspark.SQL.Tipos de importação estruttype, structfield, stringtype, integertype, floottype, ArrayType
de Pyspark.SQL.Funções Importar *
#Crie um aplicativo chamado Linuxhint
Spark_App = SparkSession.construtor.AppName ('Linuxhint').getorcreate ()
# Considere uma matriz com 5 elementos
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']),
(4, ['k']), (3, ['b', 'p']]]]
#Define o StructType e Structfields
#para os dados acima
esquema = structtype ([structfield ("student_category", integertype ()), structfield ("student_full_name", arraytype (stringtype ())))))
#Crie o DataFrame e adicione esquema ao DataFrame
df = spark_app.Createdataframe (my_array_data, esquema = esquema)
# Aplicar explodir na coluna student_full_name
df.Selecione ("Student_full_Name", Explode ('student_full_name'))).mostrar()

Saída:

Podemos ver que na 2ª coluna, cada valor na matriz de cada linha é retornado.

Agora, vamos ver e se os valores da matriz estiverem vazios.

Exemplo 2:

Este DataFrame não tem valores na matriz.

#import o módulo Pyspark
Importar Pyspark
#Import SparkSession para criar uma sessão
de Pyspark.SQL Import SparkSession
#e importar tipos de estrutura e outros tipos de dados
de Pyspark.SQL.Tipos de importação estruttype, structfield, stringtype, integertype, floottype, ArrayType
de Pyspark.SQL.Funções Importar *
#Crie um aplicativo chamado Linuxhint
Spark_App = SparkSession.construtor.AppName ('Linuxhint').getorcreate ()
# Considere uma matriz com 5 elementos
my_array_data = [(1, []), (2, []), (3, []), (4, []), (3, [])]
#Define o StructType e Structfields
#para os dados acima
esquema = structtype ([structfield ("student_category", integertype ()), structfield ("student_full_name", arraytype (stringtype ())))))
#Crie o DataFrame e adicione esquema ao DataFrame
df = spark_app.Createdataframe (my_array_data, esquema = esquema)
# Explode a coluna Student_full_Name
df.Selecione ("Student_full_Name", Explode ('student_full_name'))).mostrar()

Saída:

Ele não retorna nada, já que todos os valores estão faltando na coluna da matriz - Student_full_Name.

explode_outer ()

Agora, veremos o que explode_outer () faz. explode_outer () retornará cada valor individual de uma matriz. Se a matriz estiver vazia ou nula, ele retornará nulo e vá para a próxima matriz em uma coluna do tipo de matriz no Pyspark Dataframe. Isso é possível usando o SELECT () método. Dentro deste método, podemos usar o Array_min () função e retorne o resultado.

Sintaxe:

quadro de dados.Selecione (Explode_outer (Array_Column))

Parâmetros:
- Array_column: contém valores do tipo de matriz

Retornar:
- Ele retornará todos os valores em uma matriz em todas as linhas em uma coluna do tipo de matriz em um quadro de dados Pyspark.

A diferença entre explodir() e explode_outer () é aquele, explodir() não retornará nada quando não houver valores na matriz. Mas explode_outer () retornar nulo quando não houver valores na matriz.

Exemplo 1:

Neste exemplo, retornaremos todos os valores em uma matriz da coluna student_full_name.

#import o módulo Pyspark
Importar Pyspark
#Import SparkSession para criar uma sessão
de Pyspark.SQL Import SparkSession
#e importar tipos de estrutura e outros tipos de dados
de Pyspark.SQL.Tipos de importação estruttype, structfield, stringtype, integertype, floottype, ArrayType
de Pyspark.SQL.Funções Importar *
#Crie um aplicativo chamado Linuxhint
Spark_App = SparkSession.construtor.AppName ('Linuxhint').getorcreate ()
# Considere uma matriz com 5 elementos
my_array_data = [(1, ['a']), (2, ['b', 'l', 'b']), (3, ['k', 'a', 'k']),
(4, ['k']), (3, ['b', 'p']]]]
#Define o StructType e Structfields
#para os dados acima
esquema = structtype ([structfield ("student_category", integertype ()), structfield ("student_full_name", arraytype (stringtype ())))))
#Crie o DataFrame e adicione esquema ao DataFrame
df = spark_app.Createdataframe (my_array_data, esquema = esquema)
# Aplicar explode_outer na coluna student_full_name
df.Selecione ("student_full_name", explode_outer ('student_full_name')).mostrar()

Saída:

Agora, vamos ver e se os valores da matriz estiverem vazios.

Exemplo 2:

Este DataFrame não tem valores na matriz.

#import o módulo Pyspark
Importar Pyspark
#Import SparkSession para criar uma sessão
de Pyspark.SQL Import SparkSession
#e importar tipos de estrutura e outros tipos de dados
de Pyspark.SQL.Tipos de importação estruttype, structfield, stringtype, integertype, floottype, ArrayType
de Pyspark.SQL.Funções Importar *
#Crie um aplicativo chamado Linuxhint
Spark_App = SparkSession.construtor.AppName ('Linuxhint').getorcreate ()
# Considere uma matriz com 5 elementos
my_array_data = [(1, []), (2, []), (3, []), (4, []), (3, [])]
#Define o StructType e Structfields
#para os dados acima
esquema = structtype ([structfield ("student_category", integertype ()), structfield ("student_full_name", arraytype (stringtype ())))))
#Crie o DataFrame e adicione esquema ao DataFrame
df = spark_app.Createdataframe (my_array_data, esquema = esquema)
# Aplicar explode_outer a coluna student_full_name
df.Selecione ("student_full_name", explode_outer ('student_full_name')).mostrar()

Saída:

Ele retorna nulo em todas as linhas, já que todos os valores estão faltando na coluna da matriz- student_full_name.

Conclusão

Neste artigo, discutimos explodir() e explode_outer () Aplicado na coluna do tipo de matriz no quadro de dados com dois exemplos diferentes. explodir() e explode_outer () executará alguma ação quando todos os valores da matriz não forem nulos. Se algum valor em uma matriz for nulo, explodir() irá ignorar esse valor nulo. Mas explode_outer () considerará e retornará o valor nulo onde quer que o valor nulo esteja presente na matriz.