SPARK SQL:在CASE语句中实现AND条件

时间:2016-11-10 07:32:40

标签: scala apache-spark apache-spark-sql

我知道如何使用Scala在SPARK SQL中实现一个简单的CASE-WHEN-THEN子句。我使用的是1.6.2版。但是,我需要在CASE-WHEN子句中的多个列上指定AND条件。如何使用Scala在SPARK中实现这一目标?

提前感谢您的时间和帮助!

这是我的SQL查询:

select  sd.standardizationId,
   case when sd.numberOfShares = 0 and
             isnull(sd.derivatives,0) = 0 and 
             sd.holdingTypeId not in (3,10)
        then 
             8
        else
             holdingTypeId
       end 
   as holdingTypeId 
from sd;

2 个答案:

答案 0 :(得分:2)

首先将表读作数据帧

val table = sqlContext.table("sd")

然后用表达式选择。根据您的数据库对齐syntaxt。

val result = table.selectExpr("standardizationId","case when numberOfShares = 0 and isnull(derivatives,0) = 0 and holdingTypeId not in (3,10) then 8 else holdingTypeId end as holdingTypeId")

显示结果

result.show

答案 1 :(得分:0)

如果它想避免使用完整的字符串表达式,则另一种选择如下:

import org.apache.spark.sql.Column
import org.apache.spark.sql.functions._

val sd = sqlContext.table("sd")

val conditionedColumn: Column = when(
  (sd("numberOfShares") === 0) and
  (coalesce(sd("derivatives"), lit(0)) === 0) and
  (!sd("holdingTypeId").isin(Seq(3,10): _*)), 8
).otherwise(sd("holdingTypeId")).as("holdingTypeId")

val result = sd.select(sd("standardizationId"), conditionedColumn)