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



我有一个dataframe

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

我想创建另一个具有最大值col2&col3。预期的输出大约是:

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)

然后将UDF应用于withColumn()中以定义新列,例如:

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)))
})

最新更新