Необходимо преобразовать одну строку в несколько столбцов. Сделал следующие вещи.
val list = List("a", "b", "c", "d")
import spark.implicits._
val df = list.toDF("id")
df.show()
import spark.implicits._
val transpose = list.zipWithIndex.map {
case (_, index) => col("data").getItem(index).as(s"col_${index}")
}
df.select(collect_list($"id").as("data")).select(transpose: _*).show()
вывод:
+-----+-----+-----+-----+
|col_0|col_1|col_2|col_3|
+-----+-----+-----+-----+
| a| b| c| d|
+-----+-----+-----+-----+
Сделал что-то и преобразовал это. Но проблема с функцией транспонирования, она передает исходные данные (список). Если мы сделаем какой-либо фильтр в df, он всегда будет показывать 4 столбца, поскольку исходный список имеет 4. Как я могу сократить этот список.
Добавление дополнительной информации
df.filter($"id" =!="a" ).select(collect_list($"id").as("data")).select(transpose: _*).show()\
если применить условие фильтра и показать команду
+-----+-----+-----+-----+
|col_0|col_1|col_2|col_3|
+-----+-----+-----+-----+
| b| c| d| null|
+-----+-----+-----+-----+
, что неверно и должно отображать 3 столбца, а не 4 столбца.