Это представление проблемы, которую я пытаюсь решить.У меня есть датафрейм, и мне нужно его развернуть.После этого мне нужно применить различные функции агрегирования к разным столбцам.
В этом примере я поворачиваю 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);
Любая подсказка о том, чего мне не хватает?