scala условное вычисление значения столбца данных - PullRequest
0 голосов
/ 12 февраля 2020

Мне нужна помощь с правильным и наилучшим синтаксисом ниже Scala df:

//this works:    
var df2 = df1.withColumn("score", when(col("a")===0, (1 + 2 + 3 + 4 + 5 + 6)).otherwise(1 + 2 + 3 + 4 + 5 + 6 + 7))

Я ищу лучший и более компактный синтаксис, например:

// does not work, error: col("a") which is a column cannot be equated to an int
var df2 = df1.withColumn("score", 1 + 2 + 3 + 4 + 5 + 6 + (if (col("a")===0) 7 else 0)) 

Причина, по которой мне нужно это сделать, заключается в том, что использование «когда» работает, но строка кода слишком длинная и ее трудно читать и поддерживать, а также слишком много повторений записи 1 + 2 + 3 + 4 + 5 + 6 снова и снова.

1 Ответ

0 голосов
/ 12 февраля 2020

Попробуйте с col("a") === lit(0) или напишите udf

df1.withColumn("score", udfTest(col("a")))

val udfTest: UserDefinedFunction = 
  udf {
    (columnA: Int) => {1 + 2 + 3 + 4 + 5 + 6 + (if (columnA == 0) 0 else 7)}
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...