SPARK SQL - случай, когда тогда

Я новичок в SPARK-SQL. Существует ли эквивалент "CASE WHEN" CONDITION "THEN 0 ELSE 1 END" в SPARK SQL?

select case when 1=1 then 1 else 0 end from table

Спасибо Шридхар

Ответы

Ответ 1

До Spark 1.2.0

Поддерживаемый синтаксис (который я только что пробовал на Spark 1.0.2), кажется,

SELECT IF(1=1, 1, 0) FROM table

Этот последний поток http://apache-spark-user-list.1001560.n3.nabble.com/Supported-SQL-syntax-in-Spark-SQL-td9538.html ссылки на источник синтаксиса SQL, который может или не может помочь в зависимости от вашего комфорта с помощью Scala. По крайней мере, список ключевых слов, начинающихся (в момент написания) в строке 70, должен помочь.

Здесь прямая ссылка на источник для удобства: https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala.

Обновление для Spark 1.2.0 и выше

По Spark 1.2.0 поддерживается более традиционный синтаксис в ответ на SPARK-3813: поиск "CASE WHEN" в источник . Например:

SELECT CASE WHEN key = 1 THEN 1 ELSE 2 END FROM testData

Обновить последнее место для определения синтаксиса SQL Parser

Теперь источник парсера можно найти здесь.

Обновление для более сложных примеров

В ответ на вопрос ниже современный синтаксис поддерживает сложные булевы условия.

SELECT
    CASE WHEN id = 1 OR id = 2 THEN "OneOrTwo" ELSE "NotOneOrTwo" END AS IdRedux
FROM customer

В состоянии можно включить несколько столбцов.

SELECT
    CASE WHEN id = 1 OR state = 'MA' 
         THEN "OneOrMA" 
         ELSE "NotOneOrMA" END AS IdRedux
FROM customer

Вы также можете вставить выражение CASE WHEN THEN.

SELECT
    CASE WHEN id = 1 
         THEN "OneOrMA"
         ELSE
             CASE WHEN state = 'MA' THEN "OneOrMA" ELSE "NotOneOrMA" END
    END AS IdRedux
FROM customer

Ответ 2

Для Spark 2. + Искра при работе

Из документации:

Вычисляет список условий и возвращает одно из нескольких возможных выражений результата. Если в конце не указано иначе, возвращается null для непревзойденных условий.

 // Example: encoding gender string column into integer.

   // Scala:
   people.select(when(people("gender") === "male", 0)
     .when(people("gender") === "female", 1)
     .otherwise(2))

   // Java:
   people.select(when(col("gender").equalTo("male"), 0)
     .when(col("gender").equalTo("female"), 1)
     .otherwise(2))