SELECT c.PROCESS_ID,
CASE WHEN c.PAYMODE = 'M'
THEN
CASE WHEN CURRENCY = 'USD'
THEN c.PREMIUM * c.RATE
ELSE c.PREMIUM END * 12
ELSE
CASE WHEN CURRENCY = 'USD'
THEN c.PREMIUM * c.RATE
ELSE c.PREMIUM END END VAlue
FROM CMM c
Run Code Online (Sandbox Code Playgroud)
我想转换sql查询spark sql api我该怎么办?
谢谢
Dav*_*fin 47
如果您正在寻找使用Column对象执行此操作的方法,您可以像这样进行字面翻译:
val df: DataFrame = ...
df.select(
col("PROCESS_ID"),
when(col("PAYMODE") === lit("M"),
(when(col("CURRENCY") === lit("USD"), col("PREMIUM") * col("RATE"))
.otherwise(col("PREMIUM"))) * 12
).otherwise(
when(col("CURRENCY") === lit("USD"), col("PREMIUM") * col("RATE"))
.otherwise(col("PREMIUM"))
)
)
Run Code Online (Sandbox Code Playgroud)
然而,可能更简洁的做法是做类似的事情:
df.withColumn(
"result",
when(col("CURRENCY") === lit("USD"), col("PREMIUM") * col("RATE"))
.otherwise(col("PREMIUM"))
).withColumn(
"result",
when(col("PAYMODE") === lit("M"), col("result") * 12)
.otherwise(col("result"))
)
Run Code Online (Sandbox Code Playgroud)
至少,第二个对我来说更容易阅读.
| 归档时间: |
|
| 查看次数: |
27853 次 |
| 最近记录: |