2016-01-22 1 views
2

Я хав сделать некоторые данные чистки прежде, чем машинное обучение и мой dataframe взгляд, как показано ниже:Как выполнить операцию col (a) == null? Col (b): col (c) "в DataFrame Spark SQL с использованием Java?

 
+-------+--------+---------+--------+-------+ 
| userid|artistid|playcount| badid| goodid| 
+-------+--------+---------+--------+-------+ 
|2158448|10006467|  1|10006467|1244705| 
|2144107|10009022|  5|10009022|1024524| 
|1006831|10009473|  1|10009473|1010373| 
|2011584|10016312|  13|10016312|1000127| 
|2052189|10021776|  2|10021776|1082784| 
|2052189|10022667|  1|10022667|1082784| 
|1060325|10039984|  1|10039984|1001463| 
|2077268|10043655|  1|10043655|1000597| 
|1038421|10048281|  2|10048281|1256384| 
|2116983|10055238|  1|10055238|1003509| 
|2211143|10055238|  27|10055238|1003509| 
|1000083| 1006162|  2| 1006162|1048788| 
|1001371| 1006162|  1| 1006162|1048788| 
|1001411| 1006162|  1| 1006162|1048788| 
|1002138| 1006162|  3| 1006162|1048788| 
|1009943| 1006162|  2| 1006162|1048788| 
|1021747| 1006162|  4| 1006162|1048788| 
|1031726| 1006162|  1| 1006162|1048788| 
|1032062| 1006162|  2| 1006162|1048788| 
|1036948| 1006162|  1| 1006162|1048788| 
+-------+--------+---------+--------+-------+ 

Мне нужно создать новый DataFrame, которые содержат ток всех столбцы, а также добавить новый столбец в Java. Логика этой новой «колонны» такова:

 
IsNull(Col('badid')) ? Col('artistid') : Col('goodid') 

Любые предложения?

ответ

1

Вы можете использовать when/otherwise:

when(col("badid").isNull(), col("artistid")).otherwise(col("goodid")) 

что эквивалентно SQL CASE WHEN ... ELSE:

CASE 
    WHEN badid IS NULL THEN artistid 
    ELSE goodid 
END 
+0

Это краткий и лаконичный ответ. Теперь я знаю, что мне нужно «импортировать статические org.apache.spark.sql.functions. *;» в моем коде Java и utitlize эти методы API. Большое спасибо [zero323] (http://stackoverflow.com/users/1560062/zero323) !! –

Смежные вопросы