2017-03-06 71 views
4

功能的使用需要使用rank()秩()在星火SQL

我已经从dataset..need提取的列做排名一些指点。

Dataset<Row> inputCol= inputDataset.apply("Colname");  
Dataset<Row> DSColAwithIndex=inputDSAAcolonly.withColumn("df1Rank", rank()); 

DSColAwithIndex.show(); 

我可以排序的列,然后添加一个索引列也获得军衔......但奇怪的已知语法和rank()

+0

您必须使用窗口函数方式,因为rank和dense_rank是窗口函数 –

+0

什么是错误消息?你能否把它列入问题? –

+0

错误:线程“main”中的异常java.lang.UnsupportedOperationException:无法评估表达式:rank() – Binu

回答

2

Window规范的使用需要rank()

val w = org.apache.spark.sql.expressions.Window.orderBy("date") //some spec  

val leadDf = inputDSAAcolonly.withColumn("df1Rank", rank().over(w)) 
被指定

编辑:答案的Java版本,使用Java

import org.apache.spark.sql.expressions.WindowSpec; 
WindowSpec w = org.apache.spark.sql.expressions.Window.orderBy(colName); 
Dataset<Row> leadDf = inputDSAAcolonly.withColumn("df1Rank", rank().over(w)); 
OP
+0

谢谢...在java中尝试了下面的....正常工作... import org.apache.spark.sql。 expressions.WindowSpec; WindowSpec w = org.apache.spark.sql.expressions.Window.orderBy(colName); \t \t \t \t \t数据集 leadDf = inputDSAAcolonly.withColumn( “df1Rank”,秩()在(W)。); – Binu