Pyspark - função row_number

Pyspark - função row_number
É possível particionar as linhas no quadro de dados usando a função de janela em Pyspark,. Está disponível no Pyspark.SQL.janela módulo.

A vantagem da partição é alcançar a consistência e o agrupamento dos dados. Depois de realizar a partição, podemos fornecer os números para a linha em cada partição usando o row_number () função.

É possível particionar as linhas em um quadro de dados com base nos valores em uma coluna específica. Todos os valores semelhantes são definidos para cada partição. Suponha que existem 3 tipos de valores semelhantes, então cada tipo é uma partição. Então, haverá três partições.

Função da janela row_number ()

O Row_Number no Pyspark é uma função de janela que é usada para definir os números que começam de 1 em cada janela particionada.

O principal é que o Row_Number () não está disponível diretamente. Temos que importá -lo do Pyspark.SQL.funções módulo.

Sintaxe para importar módulo:

de Pyspark.SQL.Funções Importar row_number

Caso contrário, também podemos fazer assim para importar todos os métodos deste módulo.

de Pyspark.SQL.Funções Importar *

Temos que seguir as etapas a seguir para executar a partição e aplicar o Row_Number nos dados particionados.

Passos:

  1. Crie um quadro de dados Pyspark que tenha alguns valores semelhantes em pelo menos uma coluna.
  2. Partição Os dados usando o método Partionby () disponíveis na função da janela e encomende -os com base na coluna usando a função Orderby ().

Sintaxe:

partição = janela.Partionby ("coluna").ordem ("coluna")

Podemos solicitar os dados particionados com a coluna particionada ou qualquer outra coluna.

  1. Agora, você pode usar a função row_number () nas linhas particionadas usando o sobre() função. Então, adicionamos uma coluna para armazenar o número da linha usando o withcolumn () função.

Sintaxe:

dataframe_obj.withcolumn ("name", row_number ().sobre (partição))

Aqui, o nome especifica o nome da linha e o dataframe_obj é o nosso pyspark dataframe.

Vamos implementar o código.

Exemplo 1:

Aqui, criamos um quadro de dados Pyspark que possui 5 colunas - ['sujeito_id', 'nome', 'idade', 'tecnologia1', 'Technology2'] com 10 linhas e particionando as linhas com base nas Technology1 Usando a função da janela depois de obter os números de linha para partições e adicione -os na coluna - Linha para Technology1.

Importar Pyspark
de Pyspark.Importação SQL *
Spark_App = SparkSession.construtor.nome do aplicativo('_').getorcreate ()
alunos = [(4, 'sravan', 23, 'php', 'testes'),
(2, 'Sravan', 23, 'Oracle', 'Testing'),
(46, 'Mounika', 22, '.Net ',' html '),
(12, 'Deepika', 21, 'Oracle', 'Html'),
(46, 'Mounika', 22, 'Oracle', 'Testing'),
(12, 'Chandrika', 23, 'Hadoop', 'C#'),
(12, 'Chandrika', 22, 'Oracle', 'Testing'),
(45, 'Sravan', 23, 'Oracle', 'C#'),
(4, 'Deepika', 21, 'Php', 'C#'),
(46, 'Mounika', 22, '.Net ',' teste ')
]
dataframe_obj = spark_app.CreatedataFrame (estudantes, ['sujeito_id', 'nome', 'idade', 'tecnologia1', 'tecnologia2']))
print ("---------- DataFrame real ----------")
dataframe_obj.mostrar()
# importe a função da janela
de Pyspark.SQL.Janela de importação de janela
#import o row_number do Pyspark.SQL.funções
de Pyspark.SQL.Funções Importar row_number
#Partition O DataFrame com base nos valores na coluna Technology1 e
#orde as linhas em cada partição com base na coluna Subjetion_id
partição = janela.partitionby ("tecnologia1").ordem ('sujeito_id')
print ("---------- Particionado DataFrame ----------")
#Agora mencione o número da linha para cada linha na coluna da linha
dataframe_obj.WithColumn ("Linha para Technology1", Row_Number ().sobre (partição)).mostrar()

Saída:

Explicação:

A primeira saída representa os dados reais presentes no DataFrame. Na segunda saída, a partição é feita com base no Technology1 coluna.

O número total de partições é 4.

Partição 1:

O .A rede ocorreu duas vezes na primeira partição. Então, os row_numbers são 1 e 2.

Partição 2:

Hadoop ocorreu uma vez na segunda partição. Então, o row_number é 1.

Partição 3:

Oracle ocorreu cinco vezes na terceira partição. Então, os row_numbers são 1, 2, 3, 4 e 5.

Partição 4:

PHP ocorreu duas vezes na quinta partição. Então, os row_numbers são 1 e 2.

Exemplo 2:

Para o mesmo dataframe, partimos as linhas com base em Technology2 Usando a função da janela depois de obter os números de linha para partições e adicione -os na coluna - Linha para Technology2.

Importar Pyspark
de Pyspark.Importação SQL *
Spark_App = SparkSession.construtor.nome do aplicativo('_').getorcreate ()
alunos = [(4, 'sravan', 23, 'php', 'testes'),
(2, 'Sravan', 23, 'Oracle', 'Testing'),
(46, 'Mounika', 22, '.Net ',' html '),
(12, 'Deepika', 21, 'Oracle', 'Html'),
(46, 'Mounika', 22, 'Oracle', 'Testing'),
(12, 'Chandrika', 23, 'Hadoop', 'C#'),
(12, 'Chandrika', 22, 'Oracle', 'Testing'),
(45, 'Sravan', 23, 'Oracle', 'C#'),
(4, 'Deepika', 21, 'Php', 'C#'),
(46, 'Mounika', 22, '.Net ',' teste ')
]
dataframe_obj = spark_app.CreatedataFrame (estudantes, ['sujeito_id', 'nome', 'idade', 'tecnologia1', 'tecnologia2']))
print ("---------- DataFrame real ----------")
dataframe_obj.mostrar()
# importe a função da janela
de Pyspark.SQL.Janela de importação de janela
#import o row_number do Pyspark.SQL.funções
de Pyspark.SQL.Funções Importar row_number
#Partition O DataFrame com base nos valores na coluna Technology2 e
#orde as linhas em cada partição com base na coluna Subjetion_id
partição = janela.Partionby ("Technology2").ordem ('sujeito_id')
print ("---------- Particionado DataFrame ----------")
#Agora mencione o número da linha para cada linha na coluna da linha
dataframe_obj.WithColumn ("Linha para Technology2", Row_Number ().sobre (partição)).mostrar()

Saída:

Explicação:

A primeira saída representa os dados reais presentes no DataFrame. Na segunda saída, a partição é feita com base no Technology2 coluna.

O número total de partições é 3.

Partição 1:

C# ocorreu três vezes na primeira partição. Então, os row_numbers são 1, 2 e 3.

Partição 2:

HTML ocorreu duas vezes na segunda partição. Então, os row_numbers são 1 e 2.

Partição 3:

Os testes ocorreram cinco vezes na terceira partição. Então, os row_numbers são 1, 2, 3, 4 e 5.

Conclusão

Discutimos como particionar as linhas no quadro de dados Pyspark e obter os números de linha em cada partição usando a função da janela row_number (). O Row_Number no Pyspark é uma função de janela que é usada para definir os números que começam de 1 em cada janela particionada. Certifique -se de usar este comando enquanto usa esta função - de Pyspark.SQL.Funções Importar row_number.