PySpark执行INTERVAL类型转换SQL触发ParseException错误如何解决
报错原因
你写的CAST转换语法不符合Spark SQL的语法规范:CAST(xxx AS INTERVAL HOUR TO SECOND)是PostgreSQL等其他数据库支持的标准SQL写法,Spark SQL的解析器不识别该目标类型写法,扫描到HOUR关键字时会判定语法非法,因此抛出缺少右括号的解析错误。
解决方法
方案1:直接使用INTERVAL字面量(适用于固定字符串值)
不需要用CAST,直接在时间字符串前加INTERVAL关键字,后面指定精度即可,代码示例:
spark.sql("""SELECT INTERVAL '22:00:00' HOUR TO SECOND AS interval_val""").show()
方案2:使用to_interval函数(适用于字符串列转换,Spark 3.0及以上版本支持)
如果要转换的是表中的字符串字段,可以用内置的to_interval函数实现,代码示例:
# 示例转换表中的time_str字段(存储HH:MM:SS格式的字符串) spark.sql("""SELECT to_interval(time_str) AS interval_val FROM your_table""").show()
方案3:兼容低版本的手动拼接方案
如果使用的Spark版本低于3.0,可以拆分时分秒后用make_interval函数构造时间间隔:
spark.sql(""" SELECT make_interval( hours => cast(split(time_str, ':')[0] AS INT), mins => cast(split(time_str, ':')[1] AS INT), secs => cast(split(time_str, ':')[2] AS DOUBLE) ) AS interval_val FROM your_table """).show()
内容的提问来源于stack exchange,提问作者SMValiAli
相关产品推荐
相关产品推荐

