0
votes

Pourquoi la ligne suivante échoue-t-elle dans Spark et comment puis-je le réparer?

java.lang.ClassCastException: org.apache.spark.sql.types.IntegerType$ 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)
      ... 50 elided

1 commentaires

Hey!! L'une des réponses vous a-t-elle aidé?


3 Réponses :


2
votes

Un scala int code> ne peut pas être null. Par conséquent, pour créer une étincelle Dataframe contenant une colonne INT avec des valeurs NULL, vous avez deux options:

spark.range(1, 11).select(when('id % 2 ===0, 'id).otherwise(0) as "value")


0 commentaires

-2
votes

Vous essayez de cartographier directement les valeurs d'entier sur DataFrame, c'est-à-dire l'erreur possible, c'est pourquoi il donne une erreur de coulée, une erreur de typast. Essayez d'abord de collecter la sortie, puis d'essayer de le mapper sur un fichier de données.

Collectez d'abord les valeurs dans un var, en appelant le travail parallèle .Collect ()

Voir quelque chose comme ça - ce qui aidera à mapper les valeurs aux colonnes de DF que vous essayez de créer.

Val Somedf = SEQ ( (8, "BAT"), (64 ans, "souris"), (-27, "cheval") ) .TODF ("nombre", "mot")


1 commentaires

Merci pour votre réponse mais je ne pense pas que la collecte est nécessaire.



0
votes
sc.parallelize((1 to 10).map(i => if(i % 2 == 0) Some(i) else None)).toDF()
Option Null value is None https://www.scala-lang.org/api/current/scala/Option.html

0 commentaires