Función de ventana de rango de Pyspark

Función de ventana de rango de Pyspark
Especificar un número de rango para cada fila de Pyspark es la mejor manera para que sea fácil encontrar las filas en una partición.

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 de rango ().

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.

función de ventana rank ()

El rango 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. Sin embargo, para la siguiente fila, el rango será el siguiente número de contar desde las filas atadas (filas con el mismo rango).

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

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

Sintaxis para importar módulo

de Pyspark.sql.Rango de importación de funciones

De lo contrario, también podemos hacer esto para importar todos los métodos de este módulo.

de Pyspark.sql.Importación de funciones *

Debemos seguir los pasos a continuación para realizar la partición y aplicar el rango 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 usando 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.
Ahora, usando el encima() función en las filas particionadas, puede usar el rango() función. Entonces, agregaremos una columna para almacenar el número de fila usando el WithColumn () función.
Sintaxis:

dataframe_obj.WithColumn ("Nombre", Rank ().sobre (partición))

Entonces, el nombre especifica el nombre de la fila aquí, y DataFrame_obj es nuestro Pyspark DataFrame. Implementemos el código.

Ejemplo 1: Tecnología de rango1 por temas_id

Aquí, crearemos un marcador de datos Pyspark que tenga 5 columnas: ['temas_id', 'nombre', 'edad', 'tecnología1', 'tecnología2'] 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.

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 rango de Pyspark.sql.funciones
de Pyspark.sql.Rango de importación de funciones
#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 se menciona el rango para cada fila en la columna de rango
dataframe_obj.WithColumn ("Rank", 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.

Partitaciones 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 de rango () devuelve el mismo rango 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. Entonces, para ambos, se asigna el rango 1.
  • Para el tercer oráculo, el rango es 3 (el rango 2 no existirá ya que, para los dos oráculos anteriores, se dieron 2 rangos).
  • Para el último oráculo, el rango es 4.

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 todo PHP.

Ejemplo 2: Rank Technology2 por temas_id

Aquí, dividiremos las filas basadas en Tecnología2 Usando la función de ventana. Finalmente, daremos rangos a las filas basadas en la columna TIEÑO_ID en todas las particiones agregando una nueva columna llamada "RANGO".

(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 rango de Pyspark.sql.funciones
de Pyspark.sql.Rango de importación de funciones
#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 se menciona el rango para cada fila en la columna de rango
dataframe_obj.WithColumn ("Rank", 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.

Partitiones totales: 3

Partición 1:
C# ocurrió tres veces en la primera partición. Los dos primeros valores en la columna Sujet_ID son los mismos. Por lo tanto, la función de rango () devuelve el mismo rango 1 para los dos primeros C#, y para el tercer C#, el rango es 3.

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. Entonces, para ambos, se asigna el rango 1.
  • Para la tercera prueba, el rango es 3 (el rango 2 no existirá ya que, para las dos pruebas anteriores, se dieron 2 rangos).
  • Para la última prueba, el rango fue 4.

Ejemplo 3: Rango de tecnología2 ​​por edad

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

Finalmente, daremos filas a las filas basadas en la columna de edad en todas las particiones agregando una nueva columna llamada "RANGO".

(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 rango de Pyspark.sql.funciones
de Pyspark.sql.Rango de importación de funciones
#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 se menciona el rango para cada fila en la columna de rango
dataframe_obj.WithColumn ("Rank", 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 según la columna de edad.

Partitiones totales: 3

Partición 1:
C# ocurrió tres veces en la primera partición. Y todos los valores en la columna de edad son diferentes. Por lo tanto, la función de rango () 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 de rango () devuelve los rangos 1 y 2 para dos valores HTML.

Partición 3:

  • Las pruebas ocurrieron cinco veces en la tercera partición.
  • Para las primeras tres pruebas, los valores de edad son los mismos. Entonces, para tres, se asigna el rango 1.
  • Para la cuarta y quinta prueba, los valores de edad son los mismos. Entonces, para dos, se asigna el rango 4.

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 Rank (). El rango en Pyspark es una función de ventana que establece los rangos en las filas en cada partición. Asegúrese de usar este comando mientras usa esta función de Pyspark.sql.Rango de importación de funciones.