描述:
我有一个带有时间戳列的表,我想获取特定时间窗口中时间戳的值的数量。
我的代码如下所示:
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中得到不同的结果.....我在这里缺少什么?
最佳答案
问题解决了!
发生此问题是由于TIMEZONE。
在spark env。中,它从_unixtime获取时区。因此需要设置配置。
.config("spark.sql.session.timeZone", "UTC")
但是我仍然不明白为什么Spark sql会话会流到系统时区,而不仅仅是从列中选择.....
关于mysql - 在where(filter)子句中时间戳之间的SparkSQL(MySQL中的V.S.),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51940536/