我有一个Hive表,其中包含帐号和最近更新的日期。并非每个帐户每天都会更新,因此我无法简单地选择某一天的所有记录。我需要按帐号进行分组,然后按降序排序,以便为每个帐户最近2天。到目前为止我的脚本:
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 :(得分:1)
分组在这里不起作用,因为这是top N by group问题的一种形式。
您需要使用Spark SQL window functions,特别是rank(),按帐户ID分区,按日期降序排序,然后选择排名为< = 2的行。