Использование lit () в expr () - PullRequest
       10

Использование lit () в expr ()

0 голосов
/ 08 ноября 2018

Линия:

df.withColumn("test", expr("concat(lon, lat)")) 

работает как положено, но

df.withColumn("test", expr("concat(lon, lit(','), lat)"))

выдает следующее исключение:

org.apache.spark.sql.AnalysisException: неопределенная функция: 'lit'. Эта функция не является ни зарегистрированной временной функцией, ни постоянной функцией, зарегистрированной в базе данных «default» .; линия 1 поз 12 в org.apache.spark.sql.catalyst.analysis.Analyzer $ LookupFunctions $$ anonfun $ apply $ 15 $$ anonfun $ applyOrElse $ 49.apply (Analyzer.scala: 1198)

Почему? И какой будет обходной путь?

1 Ответ

0 голосов
/ 08 ноября 2018

Строковый аргумент expr будет проанализирован как выражение SQL и использован для построения столбца. Поскольку lit не является допустимой командой SQL, это выдаст вам ошибку.

Чтобы решить эту проблему, просто удалите lit часть:

df.withColumn("test", expr("concat(lon, ',', lat)")) 

Или используйте встроенную функцию Spark concat напрямую без expr:

df.withColumn("test", concat($"lon", lit(","), $"lat"))

Поскольку concat принимает столбцы в качестве аргументов, lit должен использоваться здесь.

...