dataframe—选择一行并根据pyspark中的最大值显示列名

cygmwpex  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(409)

我有一个pyspark数据框

| ID|colA|colB|colC|
+---+----+----+----+
|ID1|   3|   5|   6|
|ID2|   4|  12|   7|
|ID3|   2|  20|  22|
+---+----+----+----+

我要选择行 ID3 并选择三列的最大值,然后显示最大值的列名。所以如果我为行选择三列的最大值 ID3 它应该返回如下:

|colC|
+----+
|22  |
+----+

所以我的问题是,我们如何从pyspark dataframe中选择一行并基于该行的最大列值选择列名?

7gcisfzg

7gcisfzg1#

你可以在上面过滤 ID = 'ID3' 使用 greatest 函数来获取最大列名及其值。然后将其作为列:

from pyspark.sql import functions as F

df1 = df.filter("ID = 'ID3'").withColumn(
    "max_value",
    F.greatest(
        *[F.struct(F.col(c).alias("v"), F.lit(c).alias("name")) for c in df.columns[1:]]
    )
).select("max_value.*").groupBy().pivot("name").agg(F.first("v"))

df1.show(truncate=False)

# +----+

# |colC|

# +----+

# |22  |

# +----+

相关问题