PySpark有效方式N个最大元素

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

“我的数据集”因此,我必须从此数据集中获取n个(默认为3个)最大元素。如何在PySpark中以可接受的方式执行此操作?我知道如何在Pandas中执行此操作,但是我想知道如何在PySpark中有效执行此操作,或者是否可以高效执行。我的第一个想法是从pyspark.sql.functions这样使用[]

ls = []
cols = df_tmp.columns[:-1]
for j in cols:
        max_v = df_tmp.where(df_tmp["Variable"] == j).select(F.greatest(*[F.col(col) for col in cols]))
        ls.append(max_v.collect()[0][0])
return ls.max

但是这似乎是一个非常糟糕的方法,因为它会返回最大值(0.984),而不是组合值(Charlie,Foxtrot)。另外,在不重写单元格(Charlie,Foxtrot)中的值的情况下,我看不到如何获得第二大值,这是我认为您不应该在PySpark中执行的操作。

谢谢您阅读本文,尤其是对可能回答的所有人:)

所以我必须从该数据集中获取n个(默认为3个)最大元素。如何在PySpark中以可接受的方式执行此操作?我知道如何在Pandas中执行此操作,但是我想知道如何在...

pyspark max
1个回答
0
投票

您可以union从Alpha到Foxtrot的所有列来创建具有三列(数值,变量列,值的列名)的数据框。请看下面的例子:

© www.soinside.com 2019 - 2024. All rights reserved.