2015-07-27 3 views
1

Я хотел бы понять, как использовать выражения CaseWhen с новыми DataFrame api.CaseWhen in spark DataFrame

Я не вижу каких-либо ссылок на него в документации, и единственное место, где я видел это в коде: https://github.com/apache/spark/blob/v1.4.0/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala#L397

Я хотел бы, чтобы иметь возможность написать что-то вроде этого:

val col = CaseWhen(Seq(
    $"a" === lit(1), lit(10), 
    $"a" === lit(2), lit(15), 
    ... 
    lit(20) 
)) 

но этот код не будет компилироваться, потому что Seq имеет тип Column и не Expression

Что такое правильный способ использовать CaseWhen?

ответ

4

Если честно, я не знаю, предназначен ли для использования в качестве пользователя, обращенного к API, CaseWhen. Вместо этого вы должны использовать метод when и otherwise типа Column. С помощью этих методов вы можете построить столбец CaseWhen.

val column: Column = //some column 

val result: Column = column. 
    when($"a" === functions.lit(1), 10). 
    when($"a" === functions.lit(2), 15). 
    otherwise(20) 
+0

Возможно, вы правы, хотя это не 'private [slq]' и не помечено как '@ DeveloperApi'. И я не могу сделать 'column.expr', так как' expr' '' protected' – lev

+0

Вы правы. Я пропустил, что 'expr' защищен. Но я нашел другое решение. Я обновил ответ. Надеюсь, теперь это сработает. –