【发布时间】:2019-08-20 15:43:07
【问题描述】:
我正在使用 spark 和 Scala 来转换 Dataframe ,我想在其中计算一个新变量,该变量计算许多变量中每行一个变量的排名。
例子-
Input DF-
+---+---+---+
|c_0|c_1|c_2|
+---+---+---+
| 11| 11| 35|
| 22| 12| 66|
| 44| 22| 12|
+---+---+---+
Expected DF-
+---+---+---+--------+--------+--------+
|c_0|c_1|c_2|c_0_rank|c_1_rank|c_2_rank|
+---+---+---+--------+--------+--------+
| 11| 11| 35| 2| 3| 1|
| 22| 12| 66| 2| 3| 1|
| 44| 22| 12| 1| 2| 3|
+---+---+---+--------+--------+--------+
这已经用 R 回答了 - Rank per row over multiple columns in R,
但我需要在 spark-sql 中使用 scala 做同样的事情。谢谢您的帮助!
编辑- 4/1 。遇到一种情况,如果值相同,则排名应该不同。编辑第一行以复制情况。
【问题讨论】:
-
到目前为止你尝试了什么?
-
我尝试创建一个包含所有元素的数组类型的新列,然后尝试映射它并在对数组进行排序后使用 zipwithindex 来获取索引。但是在 df 上使用地图后,我被卡住了,无法使用 withcolumn 生成三个等级列。
-
您能补充更多细节吗?您需要计算的排名是多少?
标签: scala apache-spark apache-spark-sql