2016-05-06 17 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 

मैं मैं कैसे कर सकता एसक्यूएल क्वेरी चिंगारी एसक्यूएल एपीआई कनवर्ट करना चाहते हैं का उपयोग कर के मामले में लिखने के लिए? हालांकि,कैसे जब चिंगारी एसक्यूएल में हालत स्केला

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

शायद यह करने के लिए एक क्लीनर तरीका,:

धन्यवाद

+0

क्या आपने 'registerTempTable' और फिर' sqlContext.sql ("...") 'कोशिश की? –

+0

हाय उत्तर के लिए धन्यवाद, मैंने यह काम किया है लेकिन मैं एपीआई का उपयोग करना चाहता हूं तो क्या कोई विचार है कि इसे कैसे किया जाए? – praveen

+2

प्रवीण: क्या आप @ डेविड ग्रिफिन उत्तर को स्वीकार करने पर विचार कर सकते हैं। यह अन्य उपयोगकर्ताओं के लिए भी सूचक होगा। THX –

उत्तर

26

आप जिस तरह से Column वस्तुओं का उपयोग कर यह करने के लिए के लिए देख रहे हैं, तो आप इस तरह एक शाब्दिक अनुवाद कर सकते हैं ऐसा करने के लिए:

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

कम से कम, दूसरा मुझे पढ़ने के लिए बहुत आसान है।

+0

आपको बहुत बहुत धन्यवाद :) – praveen

+6

आपका स्वागत है - मेरा जवाब स्वीकार करने के लिए स्वतंत्र महसूस करें ';-) ' –

संबंधित मुद्दे