2017-03-06 103 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