应用分组依据函数后如何保留 pySpark 数据帧的特定列值?



我在pyspark :d f10中有一个数据帧,看起来像这样:对于相同的"值",converted_datetime可以不同。例如,值 = 475 两个日期是 10/04 和 11/04

+------------------+---------+-----+--------------------+-------------------+
|        State_name|    type1|value|            lat_long| converted_datetime|
+------------------+---------+-----+--------------------+-------------------+
|     Orange County|Messageid|  475|[33.5509266, -117...|2020-04-10 21:36:10|
|     Orange County|Messageid|  475|[33.5509266, -117...|2020-04-11 21:36:10|
|     Orange County|Messageid|  477|[33.5469206, -117...|2020-04-12 17:05:40|
|     Orange County|Messageid|  477|[33.5469206, -117...|2020-04-12 17:05:40|
|     Orange County|Messageid|  477|[33.5876128, -117...|2020-04-12 17:09:13|

通过使用下面的代码,我得到了 df5。我不确定converted_datetime[0:10]是否应该在 groupBy 中,因为在 df5 中,我预计特定"值"会出现两个不同的日期。

df5 = 
df10.groupBy("value","State_name").agg(F.min("converted_datetime").alias("min"),F.max("converted_datetime").alias("max")) 
.withColumn("minUnix", F.unix_timestamp(F.col("min"))) 
.withColumn("maxUnix", F.unix_timestamp(F.col("max"))) 
.withColumn("duration", F.col("maxUnix") - F.col("minUnix")) 
.drop('min','max','minUnix','maxUnix')
+-----+------------------+--------+
|value|        State_name|duration|
+-----+------------------+--------+
|  477|Los Angeles County|     416|
|  481|     Orange County|     419|
|  480|     Orange County|    1220|
|  480|Los Angeles County|     673|

问题是由于按分组功能,我丢失了converted_datetime。如果我想保留相应"值"字段的日期时间值,需要做什么?

如果你在函数中使用某个值agg这意味着你的数据集中不是一个值,而是多个值(你拥有的每个"value", "State_name"对有几个converted_datetime(。如果只想保留任何一个converted_datetime值,可以使用first函数将其添加到agg参数中,以获取组中的第一个值,或collect_list/collect_set以获取组中的所有值。

.groupBy("value", "State_name").agg(F.min("converted_datetime").alias("min"), F.max("converted_datetime").alias("max"), F.collect_list(col("converted_datetime")).alias("datetimes"))

最新更新