组内排序pyspark数据帧

问题描述 投票:1回答:1

我想每个"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"

我有两个问题:

  1. 可我只是排序相同"time""id"?如何?
  2. 效率会更高,如果我只是有点"time"比使用orderby()到两列进行排序?
apache-spark pyspark spark-dataframe pyspark-sql
1个回答
0
投票

这正是窗口是。您可以创建的“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()
© www.soinside.com 2019 - 2024. All rights reserved.