Função da janela Pyspark dense_rank

Função da janela Pyspark dense_rank
dense_rank () em Pyspark é uma função de janela que define as fileiras para as linhas em cada partição.

A classificação começa em 1 e, se algum valores forem iguais em duas ou mais linhas, a mesma classificação será atribuída.

Aqui, os valores são da coluna em que especificamos a coluna dentro do orderby (). Portanto, com base nos valores nesta coluna, dense_rank () verifica os valores e atribui o número da classificação.

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

No Pyspark, é possível particionar as linhas no quadro de dados usando a função da janela. Está disponível no Pyspark.SQL.janela módulo.

A vantagem da partição é alcançar a consistência e agrupamento de dados. Depois de executar a partição, podemos definir as fileiras para as linhas em cada partição usando a função dense_rank ().

É possível particionar as linhas em um quadro de dados com base nos valores em uma coluna específica. Então, todos os valores semelhantes são definidos para cada partição.

Devemos seguir as etapas a seguir para particionar e aplicar dense_rank em dados particionados:

Passos:

  1. Crie um Dados de Dados Pyspark com 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.
  3. Agora, você pode usar a função dense_rank () nas linhas particionadas usando a função ().
    Portanto, adicionaremos uma coluna para armazenar o número da linha usando a função WithColumn ().
    Sintaxe:
    dataframe_obj.Withcolumn ("Nome", dense_rank ().sobre (partição))
    Aqui, o nome especifica o nome da linha, e DataFrame_OBJ é o nosso Pyspark Dataframe.

    Vamos implementar o código.

Exemplo 1
Aqui, criaremos um pyspark DataFrame que possui 5 colunas: ['sujeito_id', 'nome', 'idade', 'tecnologia1', 'tecnologia2'] com 10 linhas e particionar as linhas com base em Technology1 Usando a função da janela.

Finalmente, daremos fileiras às linhas em todas as partições adicionando uma nova coluna chamada “Classificação densa”.

Importar Pyspark
de Pyspark.Importação SQL *
Spark_App = SparkSession.construtor.nome do aplicativo('_').getorcreate ()
alunos = [(4, 'sravan', 23, 'php', 'testes'),
(4, 'sravan', 23, 'php', 'testing'),
(46, 'Mounika', 22, '.Net ',' html '),
(4, 'Deepika', 21, 'Oracle', 'html'),
(46, 'Mounika', 22, 'Oracle', 'Testing'),
(12, 'Chandrika', 22, 'Hadoop', 'C#'),
(12, 'Chandrika', 22, 'Oracle', 'Testing'),
(4, '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 dense_rank do Pyspark.SQL.funções
de Pyspark.SQL.funções importam dense_rank
#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 Dense_rank para cada linha em coluna densa em classificação
dataframe_obj.Withcolumn ("dense rank", dense_rank ().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.

Partições totais: - 4

Partição 1:
.A rede ocorreu duas vezes na primeira partição. Os valores na coluna sujeito_id são os mesmos. Portanto, a função dense_rank () retorna o mesmo rank-1 para ambos .Valores líquidos.

Partição 2:
Hadoop ocorreu uma vez na segunda partição. Então, a classificação é 1.

Partição 3:
Oracle ocorreu quatro vezes na terceira partição.
Para os dois primeiros Oracle, os valores sujeitos_id são os mesmos, então para ambos, a classificação-1 é atribuída.
Para o terceiro oráculo, a classificação é 2.
Para o último Oracle, a classificação é 3.

Partição 4:
PHP ocorreu três vezes na quarta partição, e os valores na coluna Subject_id são os mesmos para todos. Portanto, a classificação é 1 para todo o PHP.

Exemplo 2
Aqui, usando a função da janela, particionaremos as linhas com base em Technology2.

Finalmente, classificaremos as linhas com base na coluna Subject_id em todas as partições adicionando uma nova coluna chamada “Classificação densa”.

(Se você não criou o Pyspark Dataframe, crie -o usando o primeiro exemplo.)

# importe a função da janela
de Pyspark.SQL.Janela de importação de janela
#import o dense_rank do Pyspark.SQL.funções
de Pyspark.SQL.funções importam dense_rank
#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 Dense_rank para cada linha em coluna densa em classificação
dataframe_obj.Withcolumn ("dense rank", dense_rank ().sobre (partição)).mostrar()

Saída:

Explicação
A saída representa os dados reais presentes no DataFrame.

Na segunda saída, a partição é feita com base no Technology2 coluna e ordenada com base na coluna Subjetion_id.

Partições totais: - 3

Partição 1:
C# ocorreu três vezes na primeira partição. Além disso, os dois primeiros valores na coluna sujeito_id são os mesmos. Portanto, a função dense_rank () retorna o mesmo rank-1 para os dois primeiros C#e, para o terceiro C#, a classificação é 2.

Partição 2:
HTML ocorreu duas vezes na segunda partição, e os valores de sujeito são diferentes para esses dois. Portanto, a classificação-1 é atribuída para o primeiro HTML, e o Rank-2 é atribuído para o segundo.

Partição 3:
Os testes ocorreram cinco vezes na terceira partição.
Para os dois primeiros testes, os valores sujeitos_id são os mesmos; portanto, para ambos, a classificação-1 é atribuída.
Para o terceiro teste, a classificação é 2.
Para o último teste, a classificação foi 3.

Exemplo 3
Aqui, usando a função da janela, particionaremos as linhas com base em Technology2.

Finalmente, classificaremos as linhas com base na coluna AGE em todas as partições, adicionando uma nova coluna chamada “Classificação densa”.

(Se você não criou o Pyspark Dataframe, crie -o usando o primeiro exemplo.)

# importe a função da janela
de Pyspark.SQL.Janela de importação de janela
#import o dense_rank do Pyspark.SQL.funções
de Pyspark.SQL.funções importam dense_rank
#Partition O DataFrame com base nos valores na coluna Technology2 e
#Order as linhas em cada partição com base na coluna de idade
partição = janela.Partionby ("Technology2").ordem ('idade')
print ("---------- Particionado DataFrame ----------")
#Agora mencione Dense_rank para cada linha em coluna densa em classificação
dataframe_obj.Withcolumn ("dense rank", dense_rank ().sobre (partição)).mostrar()

Saída:

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

Partições totais: - 3

Partição 1:
C# ocorreu três vezes na primeira partição. Todos os valores na coluna de idade são diferentes. Portanto, a função dense_rank () retorna as classificações de 1,2 e 3 por três valores de C#.

Partição 2:
HTML ocorreu duas vezes na primeira partição. Todos os valores na coluna de idade são diferentes. Portanto, a função dense_rank () retorna os ranks 1 e 2 para dois valores HTML.

Partição 3:
Os testes ocorreram cinco vezes na terceira partição.
Para os três primeiros valores de teste, os valores da idade são os mesmos. Então, para três, o Rank-1 é atribuído.
Os valores da idade para o quarto e o quinto testes são os mesmos, então a classificação-2 é dada a ambos.

Conclusão

Discutimos particionando as linhas no quadro de dados Pyspark e definindo a classificação em cada partição usando a função de janela dense_rank (). Dense_rank em Pyspark é uma função de janela que define as fileiras para as linhas em cada partição. A classificação começa em 1 e, se algum valores forem iguais em duas ou mais linhas, a mesma classificação será atribuída.