Mic*_*l N 1 window-functions apache-spark apache-spark-sql pyspark
我有一个数据框,我想在每个Window分区中提供ID。例如我有
id | col |
1 | a |
2 | a |
3 | b |
4 | c |
5 | c |
Run Code Online (Sandbox Code Playgroud)
所以我想要(基于与列col分组)
id | group |
1 | 1 |
2 | 1 |
3 | 2 |
4 | 3 |
5 | 3 |
Run Code Online (Sandbox Code Playgroud)
我想使用窗口函数,但是无论如何我都找不到为每个窗口分配ID的方法。我需要类似的东西:
w = Window().partitionBy('col')
df = df.withColumn("group", id().over(w))
Run Code Online (Sandbox Code Playgroud)
有什么办法可以达到这样的目标吗?(我不能简单地将col用作组ID,因为我有兴趣在多个列上创建一个窗口)
只需dense_rank 在Window函数上使用内置函数即可为您提供所需的结果
from pyspark.sql import window as W
import pyspark.sql.functions as f
df.select('id', f.dense_rank().over(W.Window.orderBy('col')).alias('group')).show(truncate=False)
Run Code Online (Sandbox Code Playgroud)
这应该给你
+---+-----+
|id |group|
+---+-----+
|1 |1 |
|2 |1 |
|3 |2 |
|4 |3 |
|5 |3 |
+---+-----+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1928 次 |
| 最近记录: |