PySpark SQL使用current_timestamp()报no viable alternative错误如何解决
报错含义
no viable alternative at input 是Spark SQL底层的ANTLR语法解析器抛出的通用语法错误,含义是解析器在报错指向的代码位置,无法匹配到符合Spark SQL语法规范的语句结构,本质是编写的SQL语句存在语法错误。
你这段SQL的具体问题有两个:
XXX as colB行末尾缺少列之间的分隔逗号,导致解析器将下一行的current_timestamp()识别为colB定义的一部分,无法匹配语法规则触发报错XXX as colD,行末尾多了多余的逗号,属于非法的SELECT子句结尾,也会触发语法问题
直接在SQL中使用current_timestamp()的方案
完全可以直接在Spark SQL查询语句中调用current_timestamp()函数,不需要额外调用withColumn()方法,修正SQL语法即可正常运行,修正后的代码如下:
my_df = spark.sql( """ SELECT XXX as colA, XXX as colB, current_timestamp() as colC, XXX as colD FROM XXX """ )
注意除了补充colB后的逗号,还删除了colD末尾多余的逗号,符合SELECT子句的语法规范。
内容的提问来源于stack exchange,提问作者Leoli
相关产品推荐
相关产品推荐

