Pyspark Array_Position & Array_repeat

Pyspark Array_Position & Array_repeat
“Em Python, Pyspark é um módulo Spark usado para fornecer um tipo semelhante de processamento como o Spark usando o DataFrame.

Ele fornece os métodos Structype () e Structfield () que são usados ​​para definir as colunas no Pyspark DataFrame.

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

Vamos discuti -los um por um

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 método structtype () do pyspark dataframe. 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 do ArrayType ().

Então, neste artigo, temos que criar um DataFrame 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 e 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:

Array_Position ()

Array_Position () é usado para retornar a posição do valor presente em uma matriz em cada linha da coluna do tipo de matriz. São necessários dois parâmetros, o primeiro parâmetro é a coluna da matriz, e o segundo parâmetro é o valor. Ele retorna a posição do valor em cada matriz. A posição começa com 1.

Se houver vários valores na mesma matriz, ele retornará a posição do primeiro valor.

Sintaxe

Array_Position (Array_column, "Value")

Parâmetros

  1. Array_column é a coluna Array que tem matrizes com valores
  2. O valor está presente na matriz.

A função Array_Position () é usada com o método select () para fazer a ação.

Retornar
Se o valor estiver presente em uma matriz, ele retornará a posição; Caso contrário, ele retornará 0.

Exemplo 1
Neste exemplo, obteremos a posição de valor - "K" da coluna Student_full_Name no DataFrame de dados acima criado.

#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)
#Return A posição do valor - K em cada linha da coluna student_full_name
df.Selecione ("Student_full_Name", Array_Position ("Student_full_Name", 'K')))).mostrar()

Saída

Você pode ver na segunda coluna que valoriza as posições em matrizes em todas as linhas foram devolvidas.

  1. Na primeira linha, K não existe - por isso retornou 0
  2. Na segunda fila, K não existe - por isso retornou 0
  3. Na terceira linha, K existe em duas posições, 1º e 3º - é preciso apenas a primeira posição, então retorna 0
  4. Na quarta fila, K existe na primeira posição - por isso retornou 1
  5. Na quinta fila, K não existe - por isso retornou 0

Exemplo 2
Neste exemplo, obteremos a posição de valor - "A" da coluna Student_full_Name no DataFrame de dados acima criado.

#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)
#Return A posição do valor - A em cada linha da coluna student_full_name
df.Selecione ("Student_full_Name", Array_Position ("Student_full_Name", 'A'))).mostrar()

Saída

Você pode ver na segunda coluna que valoriza as posições em matrizes em todas as linhas foram devolvidas.

  1. Na primeira linha, existe na primeira posição - por isso retornou 1
  2. Na segunda linha, A não existe - portanto, retornou 0
  3. Na terceira linha, existe na segunda posição- então retorna 2
  4. Na quarta fila, A não existe - por isso retornou 0
  5. Na quinta fila, A não existe - portanto, retorna 0.

Array_repeat ()

Array_repeat () é usado para repetir a matriz N vezes. Em outras palavras, ele duplicará a matriz e substituirá N vezes em todas as linhas na coluna do tipo de matriz. São necessários dois parâmetros. O primeiro parâmetro é o nome da coluna do tipo de matriz, e o segundo parâmetro leva para repetir, o que leva um valor inteiro que se refere ao número de vezes para repetir a matriz.

Sintaxe

Array_repeat (Array_column, Repita)

Parâmetros

  1. Array_column é a coluna Array que tem matrizes com valores
  2. repetir leva um valor inteiro para repetir a matriz em todas as linhas

A função Array_repeat () é usada com o método select () para fazer a ação.

Retornar
Se retornar matrizes repetidas na matriz aninhada.

Exemplo 1
Neste exemplo, repetiremos a matriz 2 vezes em todas as linhas da coluna Student_full_name usando Array_repeat () e exibirá o quadro de dados usando o método de coleta.

#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)
#Repare a matriz 2 vezes
df.Selecione ("student_full_name", Array_repeat ("student_full_name", 2))).colecionar ()

Saída

[Linha (student_full_name = ['a'], array_repeat (student_full_name, 2) = [['a'], ['a']])),
Linha (student_full_name = ['b', 'l', 'b'], array_repeat (student_full_name, 2) = [['b', 'l', 'b'], ['b', 'l', ' B ']]),
Linha (student_full_name = ['k', 'a', 'k'], array_repeat (student_full_name, 2) = [['k', 'a', 'k'], ['k', 'a', ' K ']]),
Linha (student_full_name = ['k'], array_repeat (student_full_name, 2) = [['k'], ['k']])),
Linha (student_full_name = ['b', 'p'], array_repeat (student_full_name, 2) = [['b', 'p'], ['b', 'p']]]]]]

Podemos ver que a matriz é repetida 2 vezes em todas as linhas da coluna Student_full_name em uma matriz aninhada,

Exemplo 2
Neste exemplo, repetiremos a matriz 4 vezes em todas as linhas da coluna student_full_name usando array_repeat () e exibir o quadro de dados usando o método de coleta.

#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)
#Repare a matriz 4 vezes
df.Selecione ("student_full_name", Array_repeat ("student_full_name", 4)).colecionar ()

Saída

[Linha (student_full_name = ['a'], array_repeat (student_full_name, 4) = [['a'], ['a'], ['a'], ['a']])),
Linha (student_full_name = ['b', 'l', 'b'], array_repeat (student_full_name, 4) = [['b', 'l', 'b'], ['b', 'l', ' B '], [' b ',' l ',' b '], [' b ',' l ',' b ']])),
Linha (student_full_name = ['k', 'a', 'k'], array_repeat (student_full_name, 4) = [['k', 'a', 'k'], ['k', 'a', ' K '], [' k ',' a ',' k '], [' k ',' a ',' k ']])),
Linha (student_full_name = ['k'], array_repeat (student_full_name, 4) = [['k'], ['k'], ['k'], ['k']])),
Linha (student_full_name = ['b', 'p'], array_repeat (student_full_name, 4) = [['b', 'p'], ['b', 'p'], ['b', 'p' p ' ], ['B', 'p']]]]

Podemos ver que a matriz é repetida 4 vezes em todas as linhas da coluna Student_full_name em uma matriz aninhada.

Conclusão

Neste artigo Pyspark, vimos duas funções de matriz diferentes. Array_Position () é usado para retornar a posição do valor especificado em uma matriz. Percebemos que ele retornaria a primeira posição se houvesse vários valores em uma matriz. Em seguida, discutimos o método Array_repeat () usado para duplicar a matriz N vezes em todas as linhas. As matrizes repetidas são armazenadas em uma matriz aninhada. Ambas as funções usam o método select () para fazer a funcionalidade.