python - Pyspark:将平均值作为新列添加到 DataFrame 中

标签 python sql apache-spark pyspark

我正在计算数据帧中一列的平均值,但它导致所有值为零。有人可以帮我解释为什么会发生这种情况吗?以下是列转换前后的代码和表格。

在计算平均值并添加“平均值”列之前

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|
 +------------------+

计算平均值并添加平均值列后

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|
+------------------+----+

最佳答案

您可以首先计算整列的 avg,然后使用 lit() 将其作为变量添加到 DataFrame 中,不需要窗口函数:

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|
+------------------+----+

关于python - Pyspark:将平均值作为新列添加到 DataFrame 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44382822/

相关文章:

python - 为什么这个 Python Flask 路由器在被跨域 AJAX 调用 ping 时返回 400 错误?

mysql - 通过SQL查询操作前面的数据

sql - 检测 SQL 中的循环引用

sql - Spark groupBy 聚合结果加入回初始数据框

scala - 这个 Spark/Scala 代码的性能瓶颈在哪里?

Perl 中的 Python itertools.product() 等价物

python - 在 CherryPy 中,是否可以为文件夹名称添加别名?

Tornado 协程中的 Python 日志记录问题

sql - 删除表是否也会删除约束?

python - 无法在 Linux 上打开 Pyspark Shell