Pyspark: agregue el promedio como una nueva columna a DataFrame

Estoy calculando la media de una columna en el dataframe pero resultó en todos los valores ceros. ¿Puede alguien ayudarme en por qué esto está sucediendo? A continuación se muestra el código y la tabla antes y después de la transformación de una columna.

Antes de calcular la media y agregar la columna “media”

result.select("dis_price_released").show(10) +------------------+ |dis_price_released| +------------------+ | 0.0| | 4.0| | 4.0| | 4.0| | 1.0| | 4.0| | 4.0| | 0.0| | 4.0| | 0.0| +------------------+ 

Después de calcular la media y agregar la columna media

 w = Window().partitionBy("dis_price_released").rowsBetween(-sys.maxsize, sys.maxsize) df2 = result.withColumn("mean", avg("dis_price_released").over(w)) df2.select("dis_price_released", "mean").show(10) +------------------+----+ |dis_price_released|mean| +------------------+----+ | 0.0| 0.0| | 0.0| 0.0| | 0.0| 0.0| | 0.0| 0.0| | 0.0| 0.0| | 0.0| 0.0| | 0.0| 0.0| | 0.0| 0.0| | 0.0| 0.0| | 0.0| 0.0| +------------------+----+ 

Puede calcular el avg primero para toda la columna, luego usar lit() para agregarlo como una variable a su DataFrame , no hay necesidad de funciones de ventana:

 from pyspark.sql.functions import lit mean = df.groupBy().avg("dis_price_released").take(1)[0][0] df.withColumn("test", lit(mean)).show() +------------------+----+ |dis_price_released|test| +------------------+----+ | 0.0| 2.5| | 4.0| 2.5| | 4.0| 2.5| | 4.0| 2.5| | 1.0| 2.5| | 4.0| 2.5| | 4.0| 2.5| | 0.0| 2.5| | 4.0| 2.5| | 0.0| 2.5| +------------------+----+ 

Esta es otra manera de resolver el problema.

 df.withColumn("mean", lit(df.select(avg("dis_price_released").as("temp")).first().getAs("temp"))).show