python - 如何在pyspark中为中值、均值和标准创建新列?
问题描述
我有一个 pyspark 数据框,如下所示:
+-----------+------------+
| date| count|
+-----------+------------+
| 2017-12-16| 2|
| 2017-12-16| 2|
| 2017-12-17| 2|
| 2017-12-17| 2|
| 2017-12-18| 1|
| 2017-12-19| 4|
| 2017-12-19| 4|
| 2017-12-19| 4|
| 2017-12-19| 4|
| 2017-12-20| 1|
+-----------+------------+
我想为 column 的中值、均值和标准差创建新列count
。预期结果:
+-----------+-----------------+------+---+
| date| count|mean|median|std|
+-----------+------------+----+------+---+
| 2017-12-16| 2| 2.6| 2|1.2|
| 2017-12-16| 2| 2.6| 2|1.2|
| 2017-12-17| 2| 2.6| 2|1.2|
| 2017-12-17| 2| 2.6| 2|1.2|
| 2017-12-18| 1| 2.6| 2|1.2|
| 2017-12-19| 4| 2.6| 2|1.2|
| 2017-12-19| 4| 2.6| 2|1.2|
| 2017-12-19| 4| 2.6| 2|1.2|
| 2017-12-19| 4| 2.6| 2|1.2|
| 2017-12-20| 1| 2.6| 2|1.2|
+-----------+------------+----+------+---+
解决方案
让我们尝试使用窗口函数:
import pyspark.sql.functions as F
from pyspark.sql.functions import *
k=Window.partitionBy().orderBy().rowsBetween(-sys.maxsize, sys.maxsize)#bounds you to column
md = F.expr('percentile_approx(count, 0.5)')#median expression
mx=F.expr('percentile(count, (0.5))')#median expression
df.withColumn("mean", F.avg('count').over(k)).withColumn("std", F.stddev(col('count')).over(k)).withColumn("median", mx.over(k)).show()
+----------+-----+------------------+------------------+------+
| date|count| mean| std|median|
+----------+-----+------------------+------------------+------+
|2017-12-16| 2|2.6666666666666665|1.3228756555322951| 2.0|
|2017-12-16| 2|2.6666666666666665|1.3228756555322951| 2.0|
|2017-12-17| 2|2.6666666666666665|1.3228756555322951| 2.0|
|2017-12-18| 1|2.6666666666666665|1.3228756555322951| 2.0|
|2017-12-19| 4|2.6666666666666665|1.3228756555322951| 2.0|
|2017-12-19| 4|2.6666666666666665|1.3228756555322951| 2.0|
|2017-12-19| 4|2.6666666666666665|1.3228756555322951| 2.0|
|2017-12-19| 4|2.6666666666666665|1.3228756555322951| 2.0|
|2017-12-20| 1|2.6666666666666665|1.3228756555322951| 2.0|
+----------+-----+------------------+------------------+------+
推荐阅读
- flutter - 来自表单的 sqflite 中的 Flutter 更新实例
- java - 构建同步映射,阻塞单个键
- sublimetext3 - 使用 Sublime 打开时解密,保存时加密
- ios - Xcode Swift appleWatch 读取应用程序 UserDefaults?
- typescript - 逃离城堡 TypeScript:当字符串键可以未定义时,枚举地狱
- excel - 比较不同/单独表列中的值时出现“类型不匹配”运行时错误
- video - 尝试在大量视频上添加介绍
- php - 在 php artisan scout:import 上出现错误
- angular - Angular SharePoint 请求摘要
- android - 尝试发布应用程序时android studio颤动错误