Spark中Long类型列无法使用Interval运算的问题求助
问题原因
Spark SQL的INTERVAL <数值> SECOND语法要求<数值>必须是固定字面量,不能是基于列计算的动态值。你单独运行各部分时,没有将动态计算结果和INTERVAL结合,所以能正常执行,但组合后因为INTERVAL接收了动态列值,导致语法解析失败。
解决方案
改用Spark内置的timestamp_add函数,它支持传入动态计算的秒数参数,语法更灵活。修改后的SQL如下:
select id,visit_time, cast(visit_time as TIMESTAMP) as visit_ts, timestamp_add(cast(visit_time as TIMESTAMP), CAST(round((hit_time/1000),0) AS int)) as hit_cst, hit_time, CAST(round((hit_time/1000),0) AS int) as dt from tbl
说明
timestamp_add(timestamp_expr, num_seconds)函数会将timestamp_expr加上指定的秒数num_seconds,返回新的时间戳- 直接把你之前计算的秒数
dt作为第二个参数传入,即可实现预期的时间偏移效果
内容的提问来源于stack exchange,提问作者Hannah
相关产品推荐
相关产品推荐

