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 异常

pySpark forEachPartition - 代码在哪里执行

Pyspark 系统找不到指定的路径

Windows下PySpark的配置