我有一个 Dataframe ,我想在每个窗口分区中给予id。
id | col |
1 | a |
2 | a |
3 | b |
4 | c |
5 | c |
所以我想(基于与列col的分组)
id | group |
1 | 1 |
2 | 1 |
3 | 2 |
4 | 3 |
5 | 3 |
我想使用一个窗口函数,但我找不到任何方式来为每个窗口分配一个ID。我需要这样的东西:
w = Window().partitionBy('col')
df = df.withColumn("group", id().over(w))
有什么方法可以实现这样的效果吗?(我不能简单地使用col作为组ID,因为我对在多个列上创建窗口感兴趣)
3条答案
按热度按时间rjee0c151#
只需使用
dense_rank
* 内置函数而不是Window函数 *,即可给予所需的结果给予你就能
iszxjhcz2#
您可以使用原始 Dataframe 为不同的
col
和自身join
分配row_number
。代码的格式为
scala
,但可以轻松更改为pyspark
。希望这对你有帮助
bfhwhh0e3#
我基于@koiralo编译了这个答案,它允许对多个列进行分组,并决定是否应该删除它们。我使用F.monotonically_increasing_id()来避免OOM问题,缺点是这些数字不会以1为单位增加,而应该被视为随机数。