【发布时间】:2016-11-29 02:22:17
【问题描述】:
我需要一个窗口函数,该函数按某些键(=列名)进行分区,按另一个列名排序并返回具有最高 x 等级的行。
这适用于升序:
def getTopX(df: DataFrame, top_x: String, top_key: String, top_value:String): DataFrame ={
val top_keys: List[String] = top_key.split(", ").map(_.trim).toList
val w = Window.partitionBy(top_keys(1),top_keys.drop(1):_*)
.orderBy(top_value)
val rankCondition = "rn < "+top_x.toString
val dfTop = df.withColumn("rn",row_number().over(w))
.where(rankCondition).drop("rn")
return dfTop
}
但是当我尝试在第 4 行将其更改为 orderBy(desc(top_value)) 或 orderBy(top_value.desc) 时,出现语法错误。这里的正确语法是什么?
【问题讨论】:
标签: scala apache-spark apache-spark-sql spark-dataframe