Función de ventana Pyspark Dense_Rank

Función de ventana Pyspark Dense_Rank
dense_rank () en Pyspark es una función de ventana que establece los rangos en las filas en cada partición.

El rango comienza a partir de 1, y si algún valor es igual en dos o más filas, entonces se asignará el mismo rango.

Aquí, los valores son de la columna donde especificamos la columna Inside Orderby (). Entonces, según los valores de esta columna, Dense_Rank () verifica los valores y asigna el número de rango.

Lo principal es que dense_rank () no está disponible directamente. Tenemos que importarlo del pyspark.sql.funciones módulo.

En Pyspark, es posible particionar las filas en el marco de datos utilizando la función de la ventana. Está disponible en el pyspark.sql.ventana módulo.

La ventaja de la partición es lograr la consistencia y la agrupación de los datos. Después de realizar la partición, podemos establecer los rangos en las filas en cada partición usando la función dense_rank ().

Es posible dividir las filas en un marcado de datos basado en los valores en una columna particular. Entonces, todos los valores similares se establecen en cada partición.

Debemos seguir los siguientes pasos para particionar y aplicar Dense_Rank en datos particionados:

Pasos:

  1. Cree un marco de datos de Pyspark con valores similares en al menos una columna.
  2. Partition los datos utilizando el método PartitionBy () disponible en la función de la ventana y pídalos en función de la columna utilizando la función OrderBy ().
    Sintaxis:
    partición = ventana.Partitionby ("columna").Orderby ("columna")
    Podemos ordenar los datos particionados con la columna particionada o cualquier otra columna.
  3. Ahora, puede usar la función dense_rank () en las filas particionadas usando la función Over ().
    Entonces, agregaremos una columna para almacenar el número de fila usando la función withColumn ().
    Sintaxis:
    dataframe_obj.WithColumn ("Nombre", Dense_Rank ().sobre (partición))
    Aquí, el nombre especifica el nombre de la fila, y DataFrame_obj es nuestro Pyspark DataFrame.

    Implementemos el código.

Ejemplo 1
Aquí, crearemos un marcador de datos de Pyspark que tenga 5 columnas: ['Tema_id', 'Nombre', 'Age', 'Technology1', 'Technology2'] con 10 filas y dividirse en las filas basadas en las filas basadas Tecnología1 Usando la función de ventana.

Finalmente, daremos rangos a las filas en todas las particiones agregando una nueva columna llamada "Rango denso".

importar pyspark
de Pyspark.Importación SQL *
Spark_app = Sparksession.constructor.nombre de la aplicación('_').getorcreate ()
Estudiantes = [(4, 'Sravan', 23, 'Php', 'Pruebas'),
(4, 'Sravan', 23, 'Php', 'Pruebas'),
(46, 'Mounika', 22, '.Net ',' html '),
(4, 'Deepika', 21, 'Oracle', 'html'),
(46, 'Mounika', 22, 'Oracle', 'Prueba'),
(12, 'Chandrika', 22, 'Hadoop', 'C#'),
(12, 'Chandrika', 22, 'Oracle', 'Prueba'),
(4, 'Sravan', 23, 'Oracle', 'C#'),
(4, 'Deepika', 21, 'Php', 'C#'),
(46, 'Mounika', 22, '.Net ',' prueba ')
]
dataFrame_OBJ = Spark_App.creatataFrame (estudiantes, ['temas_id', 'nombre', 'edad', 'tecnología1', 'tecnología2'])
imprimir ("---------- DataFrame ----------")
dataframe_obj.espectáculo()
# Importar la función de la ventana
de Pyspark.sql.Ventana de importación de ventana
#Importa el Dense_Rank de Pyspark.sql.funciones
de Pyspark.sql.las funciones importan dense_rank
#Partition El DataFrame basado en los valores en la columna Technology1 y
#Oder las filas en cada partición basada en la columna TIEMPLE_ID
partición = ventana.Partitionby ("Technology1").Orderby ('temas_id')
imprimir ("---------- DataFrame dividido ----------")
#Ahora mencione dense_rank para cada fila en columna de rango denso
dataframe_obj.WithColumn ("Dense Rank", Dense_Rank ().sobre (partición)).espectáculo()

Producción:

Explicación
La primera salida representa los datos reales presentes en DataFrame.

En la segunda salida, la partición se realiza en base a la Tecnología1 columna.

Particiones totales: - 4

Partición 1:
.La red ocurrió dos veces en la primera partición. Los valores en la columna Sujeto_ID son los mismos. Por lo tanto, la función dense_rank () devuelve el mismo rango-1 para ambos .Valores netos.

Partición 2:
Hadoop ocurrió una vez en la segunda partición. Entonces, el rango es 1.

Partición 3:
Oracle ocurrió cuatro veces en la tercera partición.
Para los dos primeros oracle, los valores de temas_id son los mismos, por lo que para ambos, se asigna el rango-1.
Para el tercer oráculo, el rango es 2.
Para el último oráculo, el rango es 3.

Partición 4:
PHP ocurrió tres veces en la cuarta partición, y los valores en la columna Sujeto_ID son los mismos para todos. Por lo tanto, el rango es 1 para todos los PHP.

Ejemplo 2
Aquí, usando la función de la ventana, dividiremos las filas basadas en Tecnología2.

Finalmente, clasificaremos las filas basadas en la columna temas_id en todas las particiones agregando una nueva columna llamada "Rango denso".

(Si no creó el Pyspark DataFrame, cree utilizando el primer ejemplo.)

# Importar la función de la ventana
de Pyspark.sql.Ventana de importación de ventana
#Importa el Dense_Rank de Pyspark.sql.funciones
de Pyspark.sql.las funciones importan dense_rank
#Partition El DataFrame basado en los valores en la columna Technology2 y
#Oder las filas en cada partición basada en la columna TIEMPLE_ID
partición = ventana.Partitionby ("Tecnología2").Orderby ('temas_id')
imprimir ("---------- DataFrame dividido ----------")
#Ahora mencione dense_rank para cada fila en columna de rango denso
dataframe_obj.WithColumn ("Dense Rank", Dense_Rank ().sobre (partición)).espectáculo()

Producción:

Explicación
La salida representa los datos reales presentes en DataFrame.

En la segunda salida, la partición se realiza en base a la Tecnología2 columna y ordenado basado en la columna asign_id.

Particiones totales: - 3

Partición 1:
C# ocurrió tres veces en la primera partición. Además, los dos primeros valores en la columna temas_id son los mismos. Por lo tanto, la función dense_rank () devuelve el mismo rango-1 para los dos primeros C#, y para el tercer C#, el rango es 2.

Partición 2:
HTML ocurrió dos veces en la segunda partición, y los valores de asunto_id son diferentes para estos dos. Entonces, el rango-1 se asigna para el primer HTML, y el rango-2 está asignado para el segundo.

Partición 3:
Las pruebas ocurrieron cinco veces en la tercera partición.
Para las dos primeras pruebas, los valores de temas_id son los mismos, por lo que para ambos, se asigna el rango-1.
Para la tercera prueba, el rango es 2.
Para la última prueba, el rango fue 3.

Ejemplo 3
Aquí, usando la función de la ventana, dividiremos las filas basadas en Tecnología2.

Finalmente, clasificaremos las filas basadas en la columna de edad en todas las particiones agregando una nueva columna llamada "Rango denso".

(Si no creó el Pyspark DataFrame, cree utilizando el primer ejemplo.)

# Importar la función de la ventana
de Pyspark.sql.Ventana de importación de ventana
#Importa el Dense_Rank de Pyspark.sql.funciones
de Pyspark.sql.las funciones importan dense_rank
#Partition El DataFrame basado en los valores en la columna Technology2 y
#ordenar las filas en cada partición en función de la columna de edad
partición = ventana.Partitionby ("Tecnología2").Orderby ('edad')
imprimir ("---------- DataFrame dividido ----------")
#Ahora mencione dense_rank para cada fila en columna de rango denso
dataframe_obj.WithColumn ("Dense Rank", Dense_Rank ().sobre (partición)).espectáculo()

Producción:

Explicación
La salida representa los datos reales presentes en DataFrame.
En la segunda salida, la partición se realiza en función de la columna Technology2 y se ordena en función de la columna de edad.

Particiones totales: - 3

Partición 1:
C# ocurrió tres veces en la primera partición. Todos los valores en la columna de edad son diferentes. Por lo tanto, la función dense_rank () devuelve los rangos 1,2 y 3 para tres valores de C#.

Partición 2:
HTML ocurrió dos veces en la primera partición. Todos los valores en la columna de edad son diferentes. Por lo tanto, la función dense_rank () devuelve los rangos 1 y 2 para dos valores HTML.

Partición 3:
Las pruebas ocurrieron cinco veces en la tercera partición.
Para los primeros tres valores de prueba, los valores de edad son los mismos. Entonces, para tres, se asigna el rango-1.
Los valores de edad para la cuarta y quinta prueba son los mismos, por lo que el rango-2 se da a ambos.

Conclusión

Discutimos la división de las filas en el marco de datos de Pyspark y establecimos el rango en cada partición utilizando la función de ventana Dense_Rank (). dense_rank en Pyspark es una función de ventana que establece los rangos en las filas en cada partición. El rango comienza a partir de 1, y si algún valor es igual en dos o más filas, entonces se asignará el mismo rango.