Я хочу применить, если условие в операции groupBy искрового кадра данных.Если первое условие выполнено, выберите столбец «A», в противном случае столбец «B» данного кадра данных
Проще вернуть один столбец в условие столбца groupBy.
Например,
df.groupBy(when(col("name") === "a",col("city")).otherwise(col("country"))).agg(lit("Individual").alias("level")).show
Приведенный выше код дает мне результат.Но если я хочу вернуть несколько столбцов в зависимости от условия if, то он не работает
Мой код:
val df = Seq(
("a", "abcdef", "123" ,"def", "uyhiu"),
("a", "7yjbb", "345" ,"hgh", "hjjhj"),
("d", "sbkbnn", "456","gyu", "hghj" )
).toDF("name", "email", "phone", "city", "country")
val list1 = Array("phone", "city")
val list2 = Array("phone", "country")
df.groupBy(when(col("name") === "a",list1.map(col): _*).otherwise(list2.map(col):_*)).agg(lit("Individual").alias("level")).show
Но я получаю ошибку:
:52: ошибка: нет: _ * 'здесь разрешены аннотации (такие аннотации допускаются только в аргументах -параметров) df.groupBy (when (col ("name") === "a", list1.map (col): _ ). в противном случае (list2.map (столбец): _ )). agg (горит («Индивидуальный»). псевдоним («уровень»)). show ^: 52: ошибка: нет: _ 'здесь разрешены аннотации (такие аннотации допускаются только в аргументах для -параметров) df.groupBy (когда (col ("name") === "a", list1.map (col):_ ). В противном случае (list2.map (столбец): _ *)). Agg (горит («Индивидуальный»). Псевдоним («уровень»)). Show