Я хочу найти максимальное значение, сравнивая 100 столбцов с фреймом данных - PullRequest
0 голосов
/ 08 марта 2019

У меня есть фрейм данных

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

1 Ответ

0 голосов
/ 08 марта 2019

Вы можете определить новую функцию 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)))
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...