apache-spark - 比较不同数据类型时,Spark 如何转换数据
问题描述
当我将 aInt
与 a进行比较时String
,Spark 会投射右侧
sql("SELECT 1621335543 >= '2021-05-18'").explain(true)
== Analyzed Logical Plan ==
(1621335543 >= CAST(2021-05-18 AS INT)): boolean
Project [(1621335543 >= cast(2021-05-18 as int)) AS (1621335543 >= CAST(2021-05-18 AS INT))#1309]
+- OneRowRelation
在这种情况下,Spark 将值转换'2021-05-18'
为Int
,结果为NULL
。
但是当我将 aTimestamp
与 a进行比较时String
,Spark 会投射左侧
sql("SELECT current_timestamp() >= '2021-05-18'").explain(true)
== Analyzed Logical Plan ==
(CAST(current_timestamp() AS STRING) >= 2021-05-18): boolean
Project [(cast(current_timestamp() as string) >= 2021-05-18) AS (CAST(current_timestamp() AS STRING) >= 2021-05-18)#1313]
+- OneRowRelation
Spark 如何选择要转换的 DataType ?
解决方案
来自 spark 代码库的此评论与您的问题有关,以下应该是最新 spark 版本中的预期行为:
对于字符串和时间戳之间的相等性,我们将字符串转换为时间戳,以便亚秒精度舍入等事情不会影响比较。
火花代码的相关参考在这里。您使用的是哪个火花版本?
推荐阅读
- java - 无法使用“HH:mm E d MMM YYYY”模式解析 DateTimeFormatter
- visual-c++ - C/c++ 相关问题。逻辑查询
- c# - WCF 客户端是否支持 OCSP 装订?
- java - 带有菜单栏和 FileReader 的 Java GUI
- javascript - 在填充变量之前执行 Ajax
- javascript - 如何浏览
- 使用箭头键的元素 - jQuery?
- sql-server - 当 BCD 映射规则处于活动状态时,在 INSERT 查询中强制转换参数值会导致算术溢出
- awesome-wm - awesome-wm 在左上角的单独对话框中打开 webstorm 菜单
- json - Ansible 解析 json 并将结果读入不同的变量
- python-3.x - 如何更改 Tkinter 滚动文本的字体大小