我想找到将 100 列与数据框进行比较的最大值

I want to find max value comparing 100 columns with data frame

我有一个数据框

syr | P1    | P2
-----------------
1   | 200   | 300
2   | 500   | 700
3   | 900   | 400

我想创建另一个 DataFrame,其最大值在 col2col3 之间。预期输出如下:

syr | P1    | P2    | max
-------------------------
1   | 200   | 300   | 300
2   | 500   | 700   | 700
3   | 900   | 400   | 900

您可以定义一个新的 UDF 函数来捕获两列之间的最大值,例如:

def maxDef(p1: Int, p2: Int): Int = if(p1>p2) p1 else p2
val max = udf[Int, Int, Int](maxDef)

然后在 withColumn() 中应用 UDF 来定义一个新列,例如:

val df1 = df.withColumn("max", max(df.col("P1"), df.col("P2")))
+---+---+---+---+
|syr| P1| P2|max|
+---+---+---+---+
|  1|200|300|300|
|  2|500|700|700|
|  3|900|400|900|
+---+---+---+---+

编辑:遍历列

首先初始化max列:

df = df.withColumn("max", lit(0))

然后foreach你想要的列(使用filter函数属性)将其与max列进行比较。

df.columns.filter(_.startsWith("P")).foreach(col => {
  df = df.withColumn("max", max(df.col("max"), df.col(col)))
})