2016-05-06 9 views
10
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 

sql sorgu kıvılcımı sql api dönüştürmek istiyorum nasıl yapabilirim? Ancak olduğunu MuhtemelenS kıvılcım koşullarında durum silikayla birlikte ne zaman yazmak için kullanılır

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")) 
) 
) 

bunu yapmak için daha temiz bir yol: Eğer Column nesneleri kullanarak bunu yapmak için bir yol arıyorsanız

sayesinde

+0

"RegisterTempTable" ı ve sonra sqlContext.sql ("...") 'yi denediniz mi? –

+0

merhaba teşekkürler ur cevap için bu şeyi yaptım ama api kullanarak yapmak istiyorum, bu yüzden nasıl yapılacağı hakkında bir fikriniz var mı? – praveen

+2

Praveen: @David Griffin yanıtını kabul etmeyi düşünebilir misiniz? Bu diğer kullanıcılara da işaret olurdu.Thx –

cevap

26

, böyle bir edebi çeviri yapabilir gibi bir şey yapmak için:

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")) 
) 

En azından, ikincisinin bana okuması çok daha kolay.

+0

Teşekkürler çok :) :) – praveen

+6

Bir şey değil, cevabımı kabul etmek için çekinmeyin; ;-) ' –