Сводная таблица Spark не работает с картами выражений - PullRequest
0 голосов
/ 29 марта 2019

Это представление проблемы, которую я пытаюсь решить.У меня есть датафрейм, и мне нужно его развернуть.После этого мне нужно применить различные функции агрегирования к разным столбцам.

В этом примере я поворачиваю df на частоте nos:

val unique_nos = Seq(1, 2, 3, 4)

val df = Seq(1, 2, 3, 1, 2, 2, 3, 2, 1, 3, 4).toDF("nos")

df.groupBy("nos").pivot("nos", unique_nos).agg(count(col("nos"))).show(10)

Это дает вывод как

+---+----+----+----+----+
|nos|   1|   2|   3|   4|
+---+----+----+----+----+
|  1|   3|null|null|null|
|  3|null|null|   3|null|
|  4|null|null|null|   1|
|  2|null|   4|null|null|
+---+----+----+----+----+

Это круто, но мне нужно применить отдельные функции agg для разделения столбцов, поэтому на этот раз я делаю что-то вроде этого (для простоты я отображаю одну и ту же функцию на все столбцы. На самом деле я буду делать последовательность с разныминазначенные функции agg):

val unique_nos = Seq(1, 2, 3, 4)

val exprs1 = unique_nos.map(_.toString -> "count").toMap

val df = Seq(1, 2, 3, 1, 2, 2, 3, 2, 1, 3, 4).toDF("nos")

df.groupBy("nos").pivot("nos", unique_nos).agg(exprs1).show(10)

Но это выдает ошибку -

org.apache.spark.sql.AnalysisException: Cannot resolve column name "1" among (nos);

Любая подсказка о том, чего мне не хватает?

...