Spark如何比较boolean和string类型的数据

ff29svar  于 2022-12-19  发布在  Apache
关注(0)|答案(1)|浏览(249)

SQL语句:

SELECT 'true' = true;

我知道结果是真的,但我想知道Spark是如何比较这两者的:

  • 将true强制转换为“true”,然后只比较两个字符串类型。
  • 将“true”强制转换为true,然后比较两个布尔类型。

Spark使用哪种方式?
当比较日期和字符串或时间戳和字符串时,也会发生同样的情况:

SELECT '2022-01-02' > date('2022-01-03');
SELECT '2022-08-12 01:00:00.123456' < timestamp('2019-08-12 01:00:00.123456');

我是Spark的新手,提前感谢!

bjp0bcyl

bjp0bcyl1#

最简单的学习方法是让Spark解释这个计划。

scala> spark.sql("SELECT 'true' = true").explain
== Physical Plan ==
*(1) Project [true AS (CAST(true AS BOOLEAN) = true)#53]
+- *(1) Scan OneRowRelation[]

scala> spark.sql("SELECT '2022-01-02' > date('2022-01-03')").explain
== Physical Plan ==
*(1) Project [false AS (CAST(2022-01-02 AS DATE) > CAST(2022-01-03 AS DATE))#55]
+- *(1) Scan OneRowRelation[]

scala> spark.sql("SELECT '2022-08-12 01:00:00.123456' < timestamp('2019-08-12 01:00:00.123456')").explain
== Physical Plan ==
*(1) Project [false AS (CAST(2022-08-12 01:00:00.123456 AS TIMESTAMP) < CAST(2019-08-12 01:00:00.123456 AS TIMESTAMP))#57]
+- *(1) Scan OneRowRelation[]

我们可以清楚地看到,在所有情况下,Spark都试图将string转换为其他类型(boolean、date、timestamp、int ......)。

相关问题