2016-09-26 89 views
0

我在Java中使用Spark 2.0。 我有一個數據集看起來像這樣:Spark 2.0 groupBy列,然後在datetype列上獲取max(date)

------+----+----+----+----------------+ 
    ID|col1|col2|col3|   date| 
------+----+----+----+----------------+ 
981200| a | q | z |  2010-12-30| 
968800| s | w | x |  2010-12-31| 
966500| d | e | c |  2010-11-02| 
966500| f | r | v |  2010-12-01| 
981200| g | t | b |  2010-12-03| 

我wanto到GROUPBY ID,並與「最後」日期(最近的一次)只得到該行。列「日期」的類型是日期

在我的情況下,結果將是

------+----------------+ 
    ID|  max(date)| 
------+----------------+ 
981200|  2010-12-30| 
968800|  2010-12-31| 
966500|  2010-12-01| 

我試圖

Dataset<Row> df = old_df.groupBy("ID").max("date"); 

但在線程 「主要」 org.apache.spark.sql失敗,錯誤

異常.AnalysisException: 「date」不是數字列。 聚合函數只能應用於數字列。

有沒有辦法在Spark中獲取最大日期(使用類型日期)?

在此先感謝。

回答

3

RelationalGroupedDataset.max僅適用於數值。

您可以嘗試agg()max功能。在斯卡拉:

import org.apache.spark.sql.functions._ 
old_df.groupBy($"ID").agg(max("date")) 

所以在Java中它應該是:

import static org.apache.spark.sql.functions.*; 
old_df.groupBy("ID").agg(max("date")) 
+0

完美的作品,非常感謝! – ercaran