我使用的是DB Connect 9.1.9。我的集群版本是9.1LTS,只有一个节点(用于测试目的(。
我的数据以delta表的形式存储在S3上。
运行以下内容:
df = spark.sql("select * from <table_name> where runDate >= '2022-01-10 14:00:00' and runDate <= '2022-01-10 15:00:00'")
当我用DB Connect运行它时,我得到:31。当我在Databricks工作区上运行它时:462。
当然,你不能检查这些数字,我只是想知道为什么我们有差异。
如果我删除runDate上的条件,我在两个平台上都有很好的结果。所以我推断这是";runDate"错了,但我找不到原因。
模式:
StructType(List(StructField(id,StringType,False),
StructField(runDate,TimestampType,true)))
我在两个平台上也有相同的解释计划。
我错过了时间戳的使用吗?
更新1:有趣的是,当我把count((直接放在spark.sql("SELECT count(*) ...")
中时,我仍然有31行。这可能是数据库连接将查询转换到集群的方式。
问题在于与Spark会话关联的时区。
将此添加到您的火花会话声明后(如果您的日期存储在UTC(:
spark.conf.set("spark.sql.session.timeZone", "UTC")