J'utilise Spark 2.2 et je rencontre des problèmes lorsque j'essaie d'appeler spark.createDataset
sur un Seq
de Map
.Codage d'une séquence de mappage vers un jeu de données Spark
code et la sortie de mon Spark suivi de la session Shell:
// createDataSet on Seq[T] where T = Int works
scala> spark.createDataset(Seq(1, 2, 3)).collect
res0: Array[Int] = Array(1, 2, 3)
scala> spark.createDataset(Seq(Map(1 -> 2))).collect
<console>:24: error: Unable to find encoder for type stored in a Dataset.
Primitive types (Int, String, etc) and Product types (case classes) are
supported by importing spark.implicits._
Support for serializing other types will be added in future releases.
spark.createDataset(Seq(Map(1 -> 2))).collect
^
// createDataSet on a custom case class containing Map works
scala> case class MapHolder(m: Map[Int, Int])
defined class MapHolder
scala> spark.createDataset(Seq(MapHolder(Map(1 -> 2)))).collect
res2: Array[MapHolder] = Array(MapHolder(Map(1 -> 2)))
J'ai essayé import spark.implicits._
, même si je suis assez certain que ça implicitement par la session importée shell Spark.
Est-ce un cas non couvert par les codeurs actuels?