--------------- --------
|YearsExperience| Salary|
--------------- --------
| 1.1| 39343.0|
| 1.3| 46205.0|
| 1.5| 37731.0|
| 2.0| 43525.0|
| 2.2| 39891.0|
| 2.9| 56642.0|
| 3.0| 60150.0|
| 3.2| 54445.0|
| 3.2| 64445.0|
| 3.7| 57189.0|
| 3.9| 63218.0|
| 4.0| 55794.0|
| 4.0| 56957.0|
| 4.1| 57081.0|
| 4.5| 61111.0|
| 4.9| 67938.0|
| 5.1| 66029.0|
| 5.3| 83088.0|
| 5.9| 81363.0|
| 6.0| 93940.0|
| 6.8| 91738.0|
| 7.1| 98273.0|
| 7.9|101302.0|
| 8.2|113812.0|
| 8.7|109431.0|
| 9.0|105582.0|
| 9.5|116969.0|
| 9.6|112635.0|
| 10.3|122391.0|
| 10.5|121872.0|
--------------- --------
我想從上面的資料中找到最高的薪水,即122391.0
我的代碼
val top= Window.partitionBy("id").orderBy(col("Salary").desc)
val res= df1.withColumn("top", rank().over(top))
結果
--------------- -------- --- ---
|YearsExperience| Salary| id|top|
--------------- -------- --- ---
| 1.1| 39343.0| 0| 1|
| 1.3| 46205.0| 1| 1|
| 1.5| 37731.0| 2| 1|
| 2.0| 43525.0| 3| 1|
| 2.2| 39891.0| 4| 1|
| 2.9| 56642.0| 5| 1|
| 3.0| 60150.0| 6| 1|
| 3.2| 54445.0| 7| 1|
| 3.2| 64445.0| 8| 1|
| 3.7| 57189.0| 9| 1|
| 3.9| 63218.0| 10| 1|
| 4.0| 55794.0| 11| 1|
| 4.0| 56957.0| 12| 1|
| 4.1| 57081.0| 13| 1|
| 4.5| 61111.0| 14| 1|
| 4.9| 67938.0| 15| 1|
| 5.1| 66029.0| 16| 1|
| 5.3| 83088.0| 17| 1|
| 5.9| 81363.0| 18| 1|
| 6.0| 93940.0| 19| 1|
| 6.8| 91738.0| 20| 1|
| 7.1| 98273.0| 21| 1|
| 7.9|101302.0| 22| 1|
| 8.2|113812.0| 23| 1|
| 8.7|109431.0| 24| 1|
| 9.0|105582.0| 25| 1|
| 9.5|116969.0| 26| 1|
| 9.6|112635.0| 27| 1|
| 10.3|122391.0| 28| 1|
| 10.5|121872.0| 29| 1|
--------------- -------- --- ---
Also I have choosed partioned by salary and orderby id.
<br>
But the result was same.
正如你所看到的,122391 就在上面的下方,但它應該排在第一位,因為我已經完成了上升。
請幫助任何人找到任何東西
uj5u.com熱心網友回復:
你確定你需要一個視窗函式嗎?您定義的視窗將資料劃分為id,我假設它是唯一的,因此該視窗生成的每個組將只有一行。看起來您想要一個覆寫整個資料框的視窗,這意味著您實際上并不需要一個視窗。如果您只想添加具有最大值的列,則可以使用原始資料幀上的聚合來獲取最大值并與之交叉連接:
val maxDF = df1.agg(max("salary").as("top"))
val res = df1.crossJoin(maxDF)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/479942.html
上一篇:Azure表單識別器未在Databricks上使用Python查找內容
下一篇:使用其他列值串列生成新列
