描述:
我有一个带有时间戳列的表,我想获取特定时间窗口中时间戳的值的数量。
我的代码如下所示:
String startTime = "2018-08-08 00:00:00";
String endTime = "2018-08-08 23:59:59";
productDF.where("CREATETIME >= '" + startTime + "' AND CREATETIME <= '" + endTime + "'").count();
我还尝试了between...and...
句子;并且:
productDF.where(unix_timestamp(col("CREATETIME"), "yyyy-mm-dd hh:mm:ss")
.cast("timestamp")
.between(
Timestamp.valueOf(startTime),
Timestamp.valueOf(endTime)
)).count();
我得到的结果是 6843 。
但是当我使用Navicat操作sql语句时:
SELECT COUNT(*) FROM my_table
WHERE CREATETIME BETWEEN '2018-08-08 00:00:00' and '2018-08-08 23:59:59';
它显示 7689 。
问题:
我想知道为什么我在Spark和Mysql中得到不同的结果.....我在这里缺少什么?
答案 0 :(得分:0)
问题解决了!
发生问题的原因是 TIMEZONE 。
在spark env。中,它从_unixtime获取时区。因此需要设置配置。
.config("spark.sql.session.timeZone", "UTC")
但是我仍然不明白为什么spark sql会话会流到系统时区,而不仅仅是从列中选择.....