Pyspark 2.4 中的 GroupedData 对象
Posted
技术标签:
【中文标题】Pyspark 2.4 中的 GroupedData 对象【英文标题】:GroupedData objects in Pyspark 2.4 【发布时间】:2019-05-02 13:15:23 【问题描述】:我有以下格式的数据:
+------+-------------+-----------------+--------------------+
|Serial| respID| VariableName| Response|
+------+-------------+-----------------+--------------------+
| 11|1_10001070394|Respondent.Serial| 11|
| 11|1_10001070394|Respondent.Origin|Interviewer Serve...|
| 11|1_10001070394| AGE| 48|
| 11|1_10001070394| SEX| Male|
| 11|1_10001070394| Eth1| No|
+------+-------------+-----------------+--------------------+
我需要将其转换为以下格式
+------+-------------+-----------------+--------------------+---------+---------+-------+
|Serial| respID|Respondent.Serial| Respondent.Origin| AGE| SEX| Eth1|
+------+-------------+-----------------+--------------------+---------+---------+-------+
| 11|1_10001070394| 11|Interviewer Serve...| 48| Male| No|
我可以通过以下代码在 python 中为较小的数据集执行此操作 -
df.groupby(['respID','Serial']).apply(lambda
x:x.pivot(columns='VariableName', values='Response')).reset_index().
groupby(['respID','Serial']).first()
但当我尝试使用 PySpark 2.4(在 DataBricks 中)时,GroupedData
对象似乎不支持提取第一个 Not Null 值。
我已经尝试了以下
df.groupBy(['respID','Serial']).pivot('VariableName',['Response'])
它创建一个GroupedData
对象,但不支持转换为 pyspark 数据帧。
【问题讨论】:
【参考方案1】:from pyspark.sql.functions import expr
x=File.groupBy("respID","Serial").pivot("VariableName").agg(expr("coalesce(first(Response),'')"))
2136 列在枢轴中太多了
【讨论】:
谢谢,它可以工作,但会创建一个元组列表。有没有办法将其转换为 Dataframe?以上是关于Pyspark 2.4 中的 GroupedData 对象的主要内容,如果未能解决你的问题,请参考以下文章
pyspark 2.4 无法从 sql 命令创建表需要 Hive 支持才能创建 Hive TABLE
Pyspark:使用 Python 从 Spark 2.4 连接到 MS SQL Server 2017 时没有合适的驱动程序错误
在 Spark 2.4 上的 pyspark.sql.functions.max().over(window) 上使用 .where() 会引发 Java 异常