我有一个数据框
syr | P1 | P2
-----------------
1 | 200 | 300
2 | 500 | 700
3 | 900 | 400
我想创建另一个DataFrame,其最大值在col2
和col3
之间。预期的输出如下:
syr | P1 | P2 | max
-------------------------
1 | 200 | 300 | 300
2 | 500 | 700 | 700
3 | 900 | 400 | 900
答案 0 :(得分:0)
您可以定义一个新的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)))
})