java.lang.RuntimeException: java.lang.La chaîne n'est pas valide externe type de schéma de type bigint ou int
Je suis à la lecture du schéma de la trame de données à partir d'un fichier texte. Le fichier ressemble à
id,1,bigint
price,2,bigint
sqft,3,bigint
zip_id,4,int
name,5,string
et je suis cartographie analysé les types de données à susciter des types de données Sql.Le code pour la création de trame de données est -
var schemaSt = new ListBuffer[(String,String)]()
//read schema from file
for (line <- Source.fromFile("meta.txt").getLines()) {
val word = line.split(",")
schemaSt += ((word(0),word(2)))
}
//map datatypes
val types = Map("int" -> IntegerType, "bigint" -> LongType)
.withDefault(_ => StringType)
val schemaChanged = schemaSt.map(x => (x._1,types(x._2))
//read data source
val lines = spark.sparkContext.textFile("data source path")
val fields = schemaChanged.map(x => StructField(x._1, x._2, nullable = true)).toList
val schema = StructType(fields)
val rowRDD = lines
.map(_.split("\t"))
.map(attributes => Row.fromSeq(attributes))
//Apply the schema to the RDD
val new_df = spark.createDataFrame(rowRDD, schema)
new_df.show(5)
new_df.printSchema()
mais le ci-dessus ne fonctionne que pour les Chaînetapez. Pour IntegerType et LongType, c'est de lever des exceptions -
java.lang.RuntimeException: java.lang.La chaîne n'est pas valide externe type de schéma de type int
et
java.lang.RuntimeException: java.lang.La chaîne n'est pas valide externe type de schéma de type bigint.
Merci d'avance!
OriginalL'auteur Naren | 2017-02-01
Vous devez vous connecter pour publier un commentaire.
Vous essayez de stocker des chaînes en numérique dactylographié colonnes.
Vous avez besoin de jeter chaîne codée des données numériques pour le numérique appropriée types lors de l'analyse.
OriginalL'auteur ImDarrenG
J'ai eu le même problème et sa cause est la
Row.fromSeq()
appel.Si elle est appelée sur le tableau de
String
, laRow
est la ligne deString
'. Ce qui ne correspond pas au type de la 2e colonne dans votre schéma (bigint
ouint
).Afin d'obtenir le valide dataframe comme un résultat de
Row.fromSeq(values: Seq[Any])
, les éléments de lavalues
les arguments doivent être du type qui correspond à votre schéma.OriginalL'auteur Vlad.Bachurin