Funciones de ventana de Pyspark Sum y AVG

Funciones de ventana de Pyspark Sum y AVG
Después de dividir las filas en el marco de datos de Pyspark, es posible devolver la suma total y el promedio en cada partición. Al usar algunas funciones agregadas en una ventana de partición, es posible devolver la suma total y el promedio. Primero, veremos cómo dividir el marco de datos en Pyspark.

Pyspark Partition Un marco de datos

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. Habrá dos pasos para dividir las filas en un marco de datos de Pyspark.

Pasos

  1. Cree un marco de datos de Pyspark con valores similares en al menos una columna.
  2. Participe los datos utilizando el método PartitionBy () disponible en la función de la ventana.

Sintaxis

partición = ventana.Partitionby ("columna")

Podemos ordenar los datos particionados con la columna particionada o cualquier otra columna. Creemos DataFrame.

Ejemplo
Aquí, crearemos un marcador de datos Pyspark que tenga 5 columnas: ['Tema_id', 'Nombre', 'Age', 'Technology1', 'Technology2'] con 10 filas.

importar pyspark
de Pyspark.SQL Import Sparksession
de Pyspark.sql.Importación de funciones *
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()

Producción:

Función de ventana Pyspark Sum ()

La suma () en la función de la ventana se usa para devolver la suma total de los valores en cada partición. Por lo tanto, es posible devolver una suma después de dividir el DataFrame.

Sintaxis

dataframe_obj.WithColumn ("suma", suma (col ("columna")).sobre (partición))

Parámetro:

suma (col ("columna"))

Aquí el suma() La función toma el nombre de la columna como parámetro. Entonces, devuelve la suma de valores en esta columna en cada partición. Agregamos el resultado a una columna de suma usando el WithColumn () función.

Ejemplo 1
Ahora, tenemos un DataFrame (creado anteriormente). Vamos a dividirlo en función de la columna Technology1 y obtener la suma total de todos los valores en la columna TEMPLEY_ID en cada partición.

# Importar la función de la ventana
de Pyspark.sql.Ventana de importación de ventana
#Importa la suma y el Col de Pyspark.sql.funciones
de Pyspark.sql.Funciones de importación Sum, col
#Partition El marcado de datos basado en los valores en la columna Technology1
partición = ventana.Partitionby ("Technology1")
imprimir ("---------- DataFrame dividido ----------")
#Realizar la suma total de los valores en la columna Sujeto_id para cada partición
dataframe_obj.WithColumn ("suma", sum (col ("temas_id")).sobre (partición)).espectáculo()

Producción:

Explicación
Partitaciones totales: 4

Partición 1:
.La red ocurrió dos veces en la primera partición. Y la suma de los valores temas_id es 46+46 = 92.

Partición 2:
Hadoop ocurrió una vez en la segunda partición. Entonces, la suma es 12.

Partición 3:
Oracle ocurrió cuatro veces en la tercera partición.
Y la suma de los valores de temas_id es 4+46+12+4 = 66.

Partición 4:
PHP ocurrió tres veces en la cuarta partición.
Y la suma de los valores temas_id es 4+4+4 = 12.

Ejemplo 2
Ahora, tenemos un DataFrame (creado anteriormente). Vamos a dividirlo en función de la columna Technology1 y obtener la suma total de todos los valores en la columna de edad en cada partición.

# Importar la función de la ventana
de Pyspark.sql.Ventana de importación de ventana
#Importa la suma y el Col de Pyspark.sql.funciones
de Pyspark.sql.Funciones de importación Sum, col
#Partition El marcado de datos basado en los valores en la columna Technology1
partición = ventana.Partitionby ("Technology1")
imprimir ("---------- DataFrame dividido ----------")
#Realizar la suma total de valores en la columna de edad para cada partición
dataframe_obj.WithColumn ("suma", suma (col ("edad")).sobre (partición)).espectáculo()

Producción:

Explicación
Partitaciones totales: 4

Partición 1:
.La red ocurrió dos veces en la primera partición. Y la suma de los valores de edad es 22+22 = 92.

Partición 2:
Hadoop ocurrió una vez en la segunda partición. Entonces, la suma es 22.

Partición 3:
Oracle ocurrió cuatro veces en la tercera partición.
Y la suma de los valores de edad es 21+22+22+23 = 88.

Partición 4:
PHP ocurrió tres veces en la cuarta partición.
Y la suma de los valores de edad es 23+23+21 = 67.

Función de ventana pyspark avg ()

La función avg () en la ventana se usa para devolver el promedio total de valores en cada partición. Por lo tanto, es posible devolver el promedio después de dividir el marco de datos.

Sintaxis

dataframe_obj.WithColumn ("promedio", avg (col ("columna")).sobre (partición))

Parámetro:

AVG (col ("columna"))

Aquí, avg () toma el nombre de la columna como parámetro. Entonces, devuelve el promedio de valores en esta columna en cada partición. Estamos agregando el resultado a la columna promedio utilizando el WithColumn () función.

Ejemplo 1
Ahora, tenemos un DataFrame (creado anteriormente). Vamos a dividirlo en función de la columna Technology1 y obtener el promedio total de todos los valores en la columna TEMPLE_ID en cada partición.

# Importar la función de la ventana
de Pyspark.sql.Ventana de importación de ventana
#Importa el AVG y el col de Pyspark.sql.funciones
de Pyspark.sql.funciones importar avg, col
#Partition El marcado de datos basado en los valores en la columna Technology1
partición = ventana.Partitionby ("Technology1")
imprimir ("---------- DataFrame dividido ----------")
#Realizar el promedio total de valores en la columna Sujet_ID para cada partición
dataframe_obj.WithColumn ("promedio", AVG (col ("temas_id")).sobre (partición)).espectáculo()

Producción:

Explicación
Partitaciones totales: 4

Partición 1:
.La red ocurrió dos veces en la primera partición. Y el promedio de los valores temas_id es (46+46)/2 = 46.0.

Partición 2:
Hadoop ocurrió una vez en la segunda partición. Entonces, el promedio es de 12.0.

Partición 3:
Oracle ocurrió cuatro veces en la tercera partición.
Y el promedio de los valores temas_id es (4+46+12+4)/4 = 16.5.

Partición 4:
PHP ocurrió tres veces en la cuarta partición.
Y el promedio de los valores temas_id es (4+4+4)/3 = 4.0.

Ejemplo 2
Ahora, tenemos un DataFrame (creado anteriormente). Vamos a dividirlo en función de la columna Technology1 y obtener el promedio total de todos los valores en la columna de edad en cada partición.

# Importar la función de la ventana
de Pyspark.sql.Ventana de importación de ventana
#Importa el AVG y el col de Pyspark.sql.funciones
de Pyspark.sql.funciones importar avg, col
#Partition El marcado de datos basado en los valores en la columna Technology1
partición = ventana.Partitionby ("Technology1")
imprimir ("---------- DataFrame dividido ----------")
#Realizar el promedio total de valores en la columna de edad para cada partición
dataframe_obj.WithColumn ("promedio", AVG (col ("edad")).sobre (partición)).espectáculo()

Producción:

Explicación
Partitaciones totales: 4

Partición 1:
.La red ocurrió dos veces en la primera partición. Y el valor de edad promedio es (22+22)/2 = 22.0.

Partición 2:
Hadoop ocurrió una vez en la segunda partición. Entonces, el promedio es de 22.0.

Partición 3:
Oracle ocurrió cuatro veces en la tercera partición.
Y la edad promedio es (21+22+22+23)/4 = 22.0.

Partición 4:
PHP ocurrió tres veces en la cuarta partición.
Y el valor de edad promedio es (23+23+21)/3 = 22.333.

Conclusión

En este tutorial de partición de Pyspark, vimos cómo devolver la suma de valores en cada ventana particionada utilizando el suma() función y los valores promedio en cada ventana particionada utilizando la función avg (). Agregamos el resultado al marco de datos existente como una nueva columna. También es posible obtener el promedio similar al avg () función usando significar(). Las cosas importantes significan de pyspark.sql.funciones módulo y simplemente asegúrese de tener que importar suma y promedio del mismo módulo.