我有一個簡單的模式已經得到了兩列3場的每列數據框:火花如何合併一個數據幀的列的兩個字段(字符串類型),生成日期
root
|-- npaDetails: struct (nullable = true)
| |-- additionalInformation: struct (nullable = true)
| |-- npaStatus: struct (nullable = true)
| |-- npaDetails: struct (nullable = true)
|-- npaHeaderData: struct (nullable = true)
| |-- npaNumber: string (nullable = true)
| |-- npaDownloadDate: string (nullable = true)
| |-- npaDownloadTime: string (nullable = true)
可能的值:
npaDownloadDate - "30JAN17"
npaDownloadTime - "19.50.00"
我需要比較DataFrame中的兩行與此模式,以確定哪一個是「新鮮」。要做到這一點,我需要合併域npaDownloadDate
和npaDownloadTime
生成一個日期,我可以很容易地比較。
低於我迄今爲止編寫的代碼。它的工作原理,但我認爲它需要更多的步驟,我敢肯定,斯卡拉比我的方法提供更好的解決方案。
val parquetFileDF = sqlContext.read.parquet("MyParquet.parquet")
val relevantRows = parquetFileDF.filter($"npaHeaderData.npaNumber" === "123456")
val date = relevantRows .select($"npaHeaderData.npaDownloadDate").head().get(0)
val time = relevantRows .select($"npaHeaderData.npaDownloadTime").head().get(0)
val dateTime = new SimpleDateFormat("ddMMMyykk.mm.ss").(date+time)
//I would replicate the previous steps to get dateTime2
if(dateTime.before(dateTime2))
println("dateTime is before dateTime2")
所以"30JAN17"
和"19.50.00"
輸出將Mon Jan 30 19:50:00 GST 2017
有另一種方式來從一列的兩個字段一個日期,而無需提取並把它們合併爲字符串?甚至更好,是有可能直接在兩個不同行之間的兩個值(日期和時間)比較的數據幀知道哪一個有一個較舊日期
這將輸出一個格式的日期Mon Jan 30 19:50:00 GST 2017? –