La ligne:
df.withColumn("test", expr("concat(lon, lat)"))
fonctionne comme prévu mais
df.withColumn("test", expr("concat(lon, lit(','), lat)"))
produit l'exception suivante:
org.Apache.spark.sql.AnalysisException: fonction non définie: "allumée". Cette fonction n'est ni une fonction temporaire enregistrée ni une fonction permanente enregistrée dans la base de données "par défaut". ligne 1 pos 12 at org.Apache.spark.sql.catalyst.analysis.Analyzer $ LookupFunctions $$ anonfun $ apply $ 15 $ anonfun $ applyOrElse $ 49.apply (Analyzer.scala: 1198)
Pourquoi? Et quelle serait la solution?
L'argument chaîne à expr
sera analysé comme une expression SQL et utilisé pour construire une colonne. Puisque lit
n'est pas une commande SQL valide, cela vous donnera une erreur. (lit
est utilisé dans Spark pour convertir une valeur littérale en une nouvelle colonne.)
Pour résoudre ce problème, supprimez simplement la partie lit
:
df.withColumn("test", expr("concat(lon, ',', lat)"))
Ou utilisez la fonction intégrée Spark concat
directement sans expr
:
df.withColumn("test", concat($"lon", lit(","), $"lat"))
Puisque concat
prend des colonnes comme arguments lit
doit être utilisé ici.