scala - 我们如何对数据框进行排名?

标签 scala apache-spark apache-spark-sql

我有以下示例数据框:

i/p

accountNumber   assetValue  
A100            1000         
A100            500          
B100            600          
B100            200          

o/p
AccountNumber   assetValue  Rank
A100            1000         1
A100            500          2
B100            600          1
B100            200          2

现在我的问题是我们如何在数据帧上添加此等级列,该列按帐号排序。如果我需要在数据框之外进行操作,我并不期望会有如此大的行数。

我正在使用Spark版本1.5和SQLContext,因此无法使用Windows函数

最佳答案

您可以使用row_number函数和Window表达式,通过它们可以指定partitionorder列:

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.row_number

val df = Seq(("A100", 1000), ("A100", 500), ("B100", 600), ("B100", 200)).toDF("accountNumber", "assetValue")

df.withColumn("rank", row_number().over(Window.partitionBy($"accountNumber").orderBy($"assetValue".desc))).show

+-------------+----------+----+
|accountNumber|assetValue|rank|
+-------------+----------+----+
|         A100|      1000|   1|
|         A100|       500|   2|
|         B100|       600|   1|
|         B100|       200|   2|
+-------------+----------+----+

关于scala - 我们如何对数据框进行排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42966590/

相关文章:

xml - scala - XML 插入/更新

scala - 如果我不能使用 SparkContext,如何创建 DataFrame?

scala - 我想在运行时获取变量的类型

scala - 有趣的 Scala 打字解决方案,在 2.7.7 中不起作用?

pandas - PySpark 数据帧 Pandas UDF 返回空数据帧

python - 如何从 PySpark DataFrame 中获取随机行?

apache-spark - 为Spark数据框中的每个组创建索引

scala - 如何定义自定义聚合函数来对向量列求和?

python - 比较两列以在 Spark DataFrame 中创建新列

scala - SLICK 如何定义双向一对多关系以用于案例类