Как Spark сравнивает данные типа Boolean и String

SQL:

SELECT 'true' = true;

Я знаю, что результат верен, но я хочу знать, как Spark сравнивает их:

  • введите 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');

Я новичок в Спарке. Заранее спасибо!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
0
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Самый простой способ научиться — попросить 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, ...).

Другие вопросы по теме