如何在DataFrame中对行进行排名?

时间:2018-01-05 12:51:35

标签: scala apache-spark spark-dataframe

我有这个DataFrame df

+-----------+--------------+----------+------------------+----+
|country_pk |        cat_pk|   item_pk|          valrank |rank|
+-----------+--------------+----------+------------------+----+
|     325100|      13531631|  69707980|  7.52451608671448|   1|
|     325100|      13531631|  69708020| 7.429137657465015|   2|
|     325100|      13531631|  69712040| 7.228689734451295|   3|
|     325100|      13531631|  69711180| 6.832206807237015|   4|
|     325100|      13531631|  69710300| 6.525382182769996|   5|
|     325100|      13531631|  69707960| 6.243003852010675|   6|
|     325100|      13531631|  69711150|6.0890434468906385|   7|
|     325100|      13531631|  69711060|3.5615308250377256|   8|
|     325100|      13531631|  69711130| 3.390146091450524|   9|
|     325100|      13531631|  69711330|3.1940345789723783|  10|
|     325100|      13531631|  69711190|2.4280125684249114|  11|
|     325100|      13531631|  69707920| 1.529893080297972|  12|
|     325100|      13531631|  69711370|               0.0|  13|
|     325100|      13531631|  69711740|               0.0|  13|
|     325100|      13531631|  69711140|               0.0|  13|
|     325100|      13531631|  69711170|               0.0|  13|
|     325100|      13531631|  69708010|               0.0|  13|
|     325100|      13531631|  69710260|               0.0|  13|
|     325100|      13531631|  69707970|               0.0|  13|
|     325100|      13531631|  69707930|               0.0|  13|
|     325100|      13531631|  69711160|               0.0|  13|
|     325100|      13531631|  69711110|               0.0|  13|
|     325100|      13531631|  69708000|               0.0|  13|
|     325100|      13531631|  69711420|               0.0|  13|
+-----------+--------------+----------+------------------+----+

我按如下方式创建列rank

val df = spark.sqlContext
              .sql("SELECT country_pk, cat_pk, item_pk, valrank, RANK() OVER (partition by cat_pk ORDER BY valrank desc) AS rank FROM df")

但是,在这种情况下,值13会重复。即使13相等,我怎样才能获得14... - valrank

0 个答案:

没有答案