Saltar al contenido

SPARK SQL – caso cuando entonces

Solución:

Antes de Spark 1.2.0

La sintaxis compatible (que acabo de probar en Spark 1.0.2) parece ser

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

Este hilo reciente http://apache-spark-user-list.1001560.n3.nabble.com/Supported-SQL-syntax-in-Spark-SQL-td9538.html enlaza con la fuente del analizador SQL, que puede o no ayuda dependiendo de su comodidad con Scala. Como mínimo, la lista de palabras clave que comienza (al momento de escribir este artículo) en la línea 70 debería ayudar.

Aquí está el enlace directo a la fuente para mayor comodidad: https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/SqlParser.scala.

Actualización para Spark 1.2.0 y posteriores

A partir de Spark 1.2.0, se admite la sintaxis más tradicional, en respuesta a SPARK-3813: busque “CASE WHEN” en la fuente de prueba. Por ejemplo:

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

Actualización del lugar más reciente para averiguar la sintaxis del analizador SQL

La fuente del analizador ahora se puede encontrar aquí.

Actualización para ejemplos más complejos

En respuesta a una de las preguntas siguientes, la sintaxis moderna admite condiciones booleanas complejas.

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

Puede involucrar varias columnas en la condición.

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

También puede anidar la expresión 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

Para Spark 2. +
Chispa cuando funciona

De la documentación:

Evalúa una lista de condiciones y devuelve una de las múltiples expresiones de resultado posibles. Si no se define lo contrario al final, se devuelve un valor nulo para las condiciones no coincidentes.

 // 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))
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *