SQL:
SELECT 'true' = true;
Я знаю, что результат верен, но я хочу знать, как Spark сравнивает их:
Какой путь использует 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 объяснить план.
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 пытается преобразовать строку в другой тип (логическое значение, дата, отметка времени, int, ...).