Вы можете определить новую функцию 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))
затем для каждого нужного столбца (используйте filter
свойство функции) сравните его с max
Column.
df.columns.filter(_.startsWith("P")).foreach(col => {
df = df.withColumn("max", max(df.col("max"), df.col(col)))
})