Spark, Scala - type de colonne de déterminer
Je peux charger des données à partir de la base de données, et je n'certains processus avec ces données.
Le problème est un tableau a, colonne de date en tant que "Chaîne", mais certains autres traits comme 'timestamp'.
Je ne peut pas savoir quel est le type de la colonne de la date jusqu'à ce que le chargement des données.
> x.getAs[String]("date") //could be error when date column is timestamp type
> x.getAs[Timestamp]("date") //could be error when date column is string type
C'est la façon de charger des données à partir de l'étincelle.
spark.read
.format("jdbc")
.option("url", url)
.option("dbtable", table)
.option("user", user)
.option("password", password)
.load()
Est-il possible de trait en même temps? ou de le convertir en chaîne de toujours?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire correspondre à un modèle sur le type de la colonne (à l'aide du DataFrame de schéma) pour décider d'analyser la Chaîne dans un Timestamp, ou simplement utiliser le Timestamp qu'est - et de l'utilisation de la
unix_timestamp
fonction de faire la conversion réelle:Voici quelques choses que vous pouvez essayer:
(1) Commencer d'utiliser le inferSchema fonction au cours de la charge si vous avez une version qui prend en charge. Ce sera l'étincelle figure le type de données des colonnes, ce qui ne fonctionne pas dans tous les scénarios. Regardez également les données d'entrée, si vous avez des citations, je conseille d'ajouter un argument supplémentaire à prendre en compte lors de la charge.
(2) Pour identifier le type de données d'une colonne, vous pouvez utiliser le code ci-dessous, il placera le nom de la colonne et des types de données dans leurs propres Tableaux de Chaînes.
Il a un moyen facile de remédier à ce qui est
get(i: Int): Any
. Et ça sera la carte entre Étincelle types SQL et types de retour automatiquement. par exemple,