2016-08-25 88 views
1

我有一個場景,我需要連接多個表,並確定日期+另一個整數列是否大於另一個日期列。在卡桑德拉/火花查詢日期加/減

Select case when (manufacturedate + LeadTime < DueDate) then numericvalue ((DueDate - manufacturepdate) + 1) else PartSource.EffLeadTime) 

有沒有辦法在spark sql中處理它?

感謝, 灰

+0

你能解釋一下這個問題了。什麼時候_case when_不工作? – WoodChopper

+0

這個整數代表了多少天?另外,它是Scala還是pyspark? –

回答

1

假設你有你的數據的數據幀,您使用的斯卡拉和「另一個整數」表示天數,做到這一點的一種方法如下:

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

val numericvalue = 1 
val column = when( 
    datediff(col("DueDate"), col("manufacturedate")) > col("LeadTime"), lit(numericvalue) 
).otherwise(col("PartSource.EffLeadTime")) 
val result = df.withColumn("newVal", column) 

期望的值將在一個名爲「newVal」的新列中。

+0

謝謝,是的,我使用scala和整數表示一些整數值,我們可以假設爲天數。我不是這個DataFrame,我只是使用普通查詢,我得到了以下錯誤, 由於數據類型不匹配而無法解析'(17038 + 5)':'(17038 + 5)'中的不同類型' (日期和整數) 我想,我會加入表格並將其設置爲DataFrame並應用您的建議。 – ashK

+0

@ashK你如何運行這個查詢?通過sqlContext.sql?如果是這樣,你可以試試'datediff(DueDate,madeate)> LeadTime' –

+0

我們使用NoSQL,並通過Cassandra上下文運行它。我可以在sqlContext中嘗試。 – ashK

2

我用sqlcontext試過,有一個date_add('date',integer)。 date_add()是配置單元功能,它也適用於cassandra上下文。

cc.sql("select date_add(current_date(),1) from table").show 

感謝 Aravinth