我在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"))