我有一个这样的数据集:
| 日期时间|价值| value |
| --|--| ------------ |
| 日期1|十个| 10 |
| 日期2|三十| 30 |
| 日期3|二十个| 20 |
| 日期4| 50人| 50 |
| 约会5|三十| 30 |
| 约会6|二十个| 20 |
| 约会7|十五个| 15 |
| 约会8|三十| 30 |
| 约会9|四十| 40 |
| 约会10|十个| 10 |
| 约会11|十个| 10 |
| 约会12|三十| 30 |
我想为每个categoy获取max(value)的日期时间
在这个例子中,我想得到这个:
| 日期时间|价值|最大日期| datetimeMax |
| --|--|--| ------------ |
| 日期1|十个|日期4| date4 |
| 日期2|三十|日期4| date4 |
| 日期3|二十个|日期4| date4 |
| 日期4| 50人|日期4| date4 |
| 约会5|三十|日期4| date4 |
| 约会6|二十个|约会9| date9 |
| 约会7|十五个|约会9| date9 |
| 约会8|三十|约会9| date9 |
| 约会9|四十|约会9| date9 |
| 约会10|十个|约会12| date12 |
| 约会11|十个|约会12| date12 |
| 约会12|三十|约会12| date12 |
提前感谢!
3条答案
按热度按时间b09cbbtk1#
在
pyspark >= 3.3.0
中使用MAX_BY
字符串
kpbwa7wx2#
字符串
cfh9epnr3#
在这种情况下使用
window
函数(row_number,max
),通过在category
上定义分区by,并在value
上降序排序by。when(row_number().over(w) == 1,
->当row_number=1时,获取datetime值,否则保留为nullmax(when(row_number().over(w) == 1,col("datetime")))
->获取窗口的最大值并填充所有行Example:
字符串