假设我有一个巨大的数据集 partitionBy('id')
. 假设id对于一个人是唯一的,那么每个id可以有n行,目标是将其减少到一行。基本上,聚合以使id不同。
w = Window().partitionBy(id).rowsBetween(-sys.maxsize, sys.maxsize)
test1 = {
key: F.first(key, True).over(w).alias(key)
for key in some_dict.keys()
if (some_dict[key] == 'test1')
}
test2 = {
key: F.last(key, True).over(w).alias(k)
for k in some_dict.keys()
if (some_dict[k] == 'test2')
}
假设我有 some_dict
如果值为test1或test2,并且基于该值,我将取上面所示的第一个或最后一个。
我该如何调用聚合并减少它?
cols = {**test1,**test2}
cols = list(cols.value())
df.select(*cols).groupBy('id').agg(*cols) # Doesnt work
上述显然行不通。有什么想法吗?这里的目标是:我有5个唯一的id和25行,每个id有5行。我想把它从25行减少到5行。
1条答案
按热度按时间cvxl0en21#
假设您的Dataframe名df包含下面的重复用法方法
在有特定条件的情况下更改order by condition,以便特定的记录位于分区的顶部