聚合列值以在 python/pyspark 中创建一个新列
Posted
技术标签:
【中文标题】聚合列值以在 python/pyspark 中创建一个新列【英文标题】:aggregate column values to create a new column in python/pyspark 【发布时间】:2019-10-10 19:05:47 【问题描述】:我有一个数据集,我想创建一个新列,其中包含 id 出现的平均年龄和每个 id 的性别模式。
id Age Gender
1 10 F
2 2 M
2 10 F
2 3 F
3 10 M
预期输出
id Age Gender
1 10 F
2 5 F
2 5 F
2 5 F
3 10 M
【问题讨论】:
【参考方案1】:您只需要一个window 并应用mean 函数:
import pyspark.sql.functions as F
from pyspark.sql import Window
l =[(1, 10 , 'F')
,(2 , 2 , 'M')
,(2 , 10 , 'F')
,(2 , 3 , 'F')
,(3 , 10, 'M')]
columns = ['id', 'Age', 'Gender']
df=spark.createDataFrame(l, columns)
w = Window.partitionBy('id')
df.withColumn('Age', F.mean('Age').over(w)).show()
输出:
+---+----+------+
| id| Age|Gender|
+---+----+------+
| 1|10.0| F|
| 3|10.0| M|
| 2| 5.0| F|
| 2| 5.0| F|
| 2| 5.0| M|
+---+----+------+
【讨论】:
如果数据框中的列太多需要聚合? 列数与计算均值无关。以上是关于聚合列值以在 python/pyspark 中创建一个新列的主要内容,如果未能解决你的问题,请参考以下文章
从 xxx.plist 获取值以在 Target 中构建设置
如何在 Databricks 的 PySpark 中使用在 Scala 中创建的 DataFrame