2016-07-26 41 views
0

我有一個包含帳號和最近更新日期的Hive表。並非每個帳戶都每天更新,所以我不能簡單地選擇某一天的所有記錄。我需要按帳號分組,然後按降序排序,以便爲每個帳戶使用最近的2天。到目前爲止,我的腳本:使用Spark Scala中的配置表格降序排列

sc.setLogLevel("ERROR") 
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 
import org.apache.spark.sql.functions._ 
import sqlContext.implicits._ 
val df1 = sqlContext.sql("FROM mydb.mytable SELECT account_num, last_updated") 
val DFGrouped = df1.groupBy("account_num").orderBy(desc("data_dt")) 

我得到錯誤的排序依據:

value orderBy is not a member of org.apache.spark.sql.GroupedData 

什麼我應該在這裏做任何想法?

+0

它看起來像你想訂購的元素在分組內。如果是這樣,你可以嘗試像這樣:'groupBy(...)。map(_。orderBy(...))' – jwvh

+0

@jwh它不起作用。 'groupBy'只是邏輯運算。 – zero323

回答

1

分組不會在這裏工作,因爲這是top N by group問題的一種形式。

你需要使用分區通過帳戶ID和按日期降序使用Spark SQL window functions,特別是秩(),然後用等級選擇行< = 2