我知道如何使用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;
答案 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)