描述:
我有一个带有timestamp列的表,我想得到在特定时间窗口中时间戳所在的值的数目。
我的代码如下所示:
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中得到不同的结果…..我在这里遗漏了什么??
1条答案
按热度按时间tvmytwxo1#
问题解决了!
这个问题的发生是因为时区的关系。
在spark环境中,它从unixtime获取时区,因此需要设置配置。
但是我仍然不明白为什么sparksql会话在系统时区中流动,而不是从列中选择。。。。。