У меня есть последовательность карт. Каждая карта содержит имена столбцов в качестве ключей и значения столбцов в качестве значений. Итак, одна карта описывает одну строку. Я не знаю, сколько записей будет на карте. Поэтому я не могу создать кортеж фиксированной длины в своем коде. Я хочу преобразовать последовательность в фрейм данных. Я попробовал следующий код:
val mapRDD= sc.parallelize(Seq(
Map("col1" -> "10", "col2" -> "Rohan", "col3" -> "201"),
Map("col1" -> "13", "col2" -> "Ross", "col3" -> "201")
))
val columns=mapRDD.take(1).flatMap(a=>a.keys)
val resultantDF=mapRDD.map{value=> // Exception is thrown from this block
value.values.toList
}.toDF(columns:_*)
resultantDF.show()
Но он дал следующее исключение:
org.apache.spark.sql.types.ArrayType cannot be cast to org.apache.spark.sql.types.StructType
java.lang.ClassCastException: org.apache.spark.sql.types.ArrayType cannot be cast to org.apache.spark.sql.types.StructType
at org.apache.spark.sql.SQLContext.createDataFrame(SQLContext.scala:414)
at org.apache.spark.sql.SQLImplicits.rddToDataFrameHolder(SQLImplicits.scala:155)
...
Я пробовал несколько других подходов, но ничего не получалось.