2 votes

Lecture d'anciennes données dans Spark avec un schéma rétrocompatible

J'ai déjà des données anciennes stockées en parquet avec un schéma représenté par

case class A(name: String)

J'aimerais ajouter un nouveau champ non obligatoire dans la rubrique

case class B(name: String, age: Option[Int])

et lire les anciennes et les nouvelles données dans le même fichier. DataFrame . A chaque fois que j'essaie de lire les données avec spark.read.parquet("test_path").as[B].collect() J'obtiens l'exception suivante :

Exception dans le thread "main" org.apache.spark.sql.AnalysisException : cannot resolve '``age`' given input columns : [name] ;

Existe-t-il un moyen de spécifier un schéma rétrocompatible pour toutes mes données ?

2voto

kosii Points 1342

Pour lire des données plus anciennes avec un schéma rétrocompatible, il ne suffit pas de spécifier le nouvel élément Encoder vous devez spécifier manuellement un StructType pour le DataSet et ne laissez pas Spark le déduire en se basant sur l'un ou l'autre des éléments. De cette façon, il n'y aura pas de champs manquants lors de la conversion en un fichier de type DataFrame :

spark.read.schema(Encoders.product[B].schema).parquet("test").as[B].collect()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X