Apache spark Spark-日期与时间戳比较-无意义结果`2018-01-01`小于`2018-01-01 00:00:00`

Apache spark Spark-日期与时间戳比较-无意义结果`2018-01-01`小于`2018-01-01 00:00:00`,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我遇到了一件事,火花和比较日期与时间戳,我只是不明白发生了什么 下面是要复制的代码(pyspark) 这完全违背了我的期望。我们得到“2018-01-01”小于“2018-01-01 00:00:00”——显然在00:00:00之前的这个日期没有任何东西,所以我觉得这是违反直觉的 我希望出现异常(比较日期和时间戳是不明确的),或者通过强制转换将其与时间戳进行比较,或者两者都与时间戳进行比较(将2018-01-01视为2018-01-01 00:00:00进行比较) 有人能解释为什么会发生这种比较

我遇到了一件事,火花和比较日期与时间戳,我只是不明白发生了什么

下面是要复制的代码(pyspark)

这完全违背了我的期望。我们得到
“2018-01-01”
小于
“2018-01-01 00:00:00”
——显然在
00:00:00
之前的这个日期没有任何东西,所以我觉得这是违反直觉的

我希望出现异常(比较日期和时间戳是不明确的),或者通过强制转换将其与时间戳进行比较,或者两者都与时间戳进行比较(将
2018-01-01
视为
2018-01-01 00:00:00
进行比较)


有人能解释为什么会发生这种比较吗?更重要的是,我能让Spark按照我的期望行事吗?我能让Spark抛出一个异常吗?

这是因为时间戳和日期都向下转换为字符串,这会导致意外的结果

以下是为您的查询分析的逻辑计划:

 +- Project [(cast(d#46 as string) < cast(t#47 as string)) AS natural_lt#37, (cast(d#46 as string) = cast(t#47 as string)) AS natural_eq#38, (cast(d#46 as string) > cast(t#47 as string)) AS natural_gt#39, (d#46 < cast(t#47 as date)) AS cast_date_lt#40, (d#46 = cast(t#47 as date)) AS cast_date_eq#41, (d#46 > cast(t#47 as date)) AS cast_date_gt#42, (cast(d#46 as timestamp) < t#47) AS cast_timestamp_lt#43, (cast(d#46 as timestamp) = t#47) AS cast_timestamp_eq#44, (cast(d#46 as timestamp) > t#47) AS cast_timestamp_gt#45]
(铸造(d#47作为字符串)铸造(T3547作为字符串)作为字符串)铸造(T3547作为字符串)作为自然的自然的(37)自然的(铸造(D3546作为字符串)作为自然的(37)自然的(铸造(铸造(d(作为字符串)作为字符串)作为自然的(铸造(作为字符串)作为字符串)作为自然的(铸造(铸造(作为字符串)作为字符串)作为字符串)作为自然的)作为自然的自然的(37,37,(铸造(铸造(铸造(铸造(铸造(铸造(铸造(d(d(作为字符串)作为字符串)作为字符串)作为字符串)作为字符串)作为字符串)作为字符串)作为字符串)作为字符串)作为字符串)作为自然的作为自然的)作为自然的(T3547作为字符串)作为字符串)作为字符串)作为字符串)作为字符串)作为自然的)作为自然的作为自然的)作为自然的作为自然的)作为自然的)作为自然的)作为自然的)作为自然的(作为自然的)作为自然的(作为自然的(U日期(eq#41)(d#46>演员阵容(t#47为日期))铸态日期42,(铸态(d#46为时间戳)t#47)铸态时间戳45] 吉拉:(修复版本:2.4.0)

+----------+----------+----------+------------+------------+------------+-----------------+-----------------+-----------------+
|natural_lt|natural_eq|natural_gt|cast_date_lt|cast_date_eq|cast_date_gt|cast_timestamp_lt|cast_timestamp_eq|cast_timestamp_gt|
+----------+----------+----------+------------+------------+------------+-----------------+-----------------+-----------------+
|      true|     false|     false|       false|        true|       false|            false|             true|            false|
+----------+----------+----------+------------+------------+------------+-----------------+-----------------+-----------------+
 +- Project [(cast(d#46 as string) < cast(t#47 as string)) AS natural_lt#37, (cast(d#46 as string) = cast(t#47 as string)) AS natural_eq#38, (cast(d#46 as string) > cast(t#47 as string)) AS natural_gt#39, (d#46 < cast(t#47 as date)) AS cast_date_lt#40, (d#46 = cast(t#47 as date)) AS cast_date_eq#41, (d#46 > cast(t#47 as date)) AS cast_date_gt#42, (cast(d#46 as timestamp) < t#47) AS cast_timestamp_lt#43, (cast(d#46 as timestamp) = t#47) AS cast_timestamp_eq#44, (cast(d#46 as timestamp) > t#47) AS cast_timestamp_gt#45]