Kyu*_*nam 6 scala apache-spark apache-spark-sql databricks
该行:
df.withColumn("test", expr("concat(lon, lat)"))
Run Code Online (Sandbox Code Playgroud)
可以正常工作,但是
df.withColumn("test", expr("concat(lon, lit(','), lat)"))
Run Code Online (Sandbox Code Playgroud)
产生以下异常:
org.apache.spark.sql.AnalysisException:未定义的函数:'lit'。该功能既不是注册的临时功能,也不是在数据库“默认”中注册的永久功能。org.apache.spark.sql.catalyst.analysis.Analyzer $ LookupFunctions $$ anonfun $ apply $ 15 $ anonfun $ applyOrElse $ 49.apply(Analyzer.scala:1198)的第1行pos 12
为什么?解决方法是什么?
字符串参数 toexpr
将被解析为 SQL 表达式并用于构造列。由于lit
不是有效的 SQL 命令,这会给您一个错误。(lit
在 Spark 中用于将文字值转换为新列。)
要解决这个问题,只需移除lit
零件:
df.withColumn("test", expr("concat(lon, ',', lat)"))
Run Code Online (Sandbox Code Playgroud)
或者concat
直接使用内置的 Spark函数而不用expr
:
df.withColumn("test", concat($"lon", lit(","), $"lat"))
Run Code Online (Sandbox Code Playgroud)
由于这里必须使用concat
以列作为参数lit
。
归档时间: |
|
查看次数: |
3531 次 |
最近记录: |