2017-08-01 38 views
0

如果我有一個案例類是這樣的:星火的Sql數據集獲得指數

Person(name:String = null, rank:Integer = null) 

而且我有一個dataset: Dataset[Person]

假設數據集有5個人對象:

Dataset[ Person(name = "Jack",id = 100, rank = null), 
      Person(name = "Mary",id = 400, rank = null), 
      Person(name = "Tom",id = 199, rank = null), 
      Person(name = "Linda", id = 55, rank = null), 
      Person(name = "Wendy", id = 30, rank = null)] 

我想通過id對數據集進行排序後,在Scala中填充排名字段。使數據集變爲:

Dataset[ Person(name = "Wendy", id = 30, rank = 1), 
      Person(name = "Linda", id = 55, rank = 2), 
      Person(name = "Jack", id = 100, rank = 3), 
      Person(name = "Tom", id = 199, rank = 4), 
      Person(name = "Mary", id = 400, rank = 5)] 

在此先感謝!

+0

排名規則是什麼?你能否以某種方式訂購數據集?否則這在我看來沒有多大意義。 –

+0

Hi @RaphaelRoth感謝您的反饋。是的,這將是一個領域的秩序,讓我們說Person.Id領域的秩序。 – vincwng

回答

1

如果你有一個數據集的話,你可以使用row_number功能

ds.withColumn("rank", row_number().over(Window.orderBy($"id"))) 

或者還與RANK函數

ds.withColumn("rank", rank().over(Window.orderBy("id"))) 

高清ROW_NUMBER()添加排名列:列

窗口函數:返回從 窗口分區中的1開始的連續編號。

希望這會有所幫助!

+0

這對強類型數據集是如何工作的? –

+0

但是這會將數據集轉換爲數據幀?我想排名在人物對象內 – vincwng

+0

其實這個工程!我只需要將Dataframe轉換爲Dataset [Person]。超! – vincwng