我想每个"time"
组内排序列"id"
。
数据是这样的:
id time name
132 12 Lucy
132 10 John
132 15 Sam
78 11 Kate
78 7 Julia
78 2 Vivien
245 22 Tom
我希望得到这样的:
id time name
132 10 John
132 12 Lucy
132 15 Sam
78 2 Vivien
78 7 Julia
78 11 Kate
245 22 Tom
我试过了
df.orderby(['id','time'])
但我并不需要排序"id"
。
我有两个问题:
"time"
内"id"
?如何?"time"
比使用orderby()
到两列进行排序?这正是窗口是。您可以创建的“ID”列分区和分类由“时间”栏的窗口。接下来,您可以在该窗口上应用的任何功能。
# Create a Window
from pyspark.sql.window import Window
w = Window.partitionBy(df.id).orderBy(df.time)
现在,使用该窗口在任何功能:对于例如为:假设你想在同一组中创建各行之间的时间差的一列
import pyspark.sql.functions as f
df = df.withColumn("timeDelta", df.time - f.lag(df.time,1).over(w))
我希望这给你一个想法。有效地你排序利用窗口的数据帧,现在可以应用任何功能它。
如果你只是想查看您的结果,你会发现通过该行数量和种类,以及。
df.withColumn("order", f.row_number().over(w)).sort("order").show()