Scala 十进制值的密集秩

Scala 十进制值的密集秩,scala,apache-spark,Scala,Apache Spark,如何计算十进制值的danse_秩 我有如下输入值: pid | biosver| 1 | 1.01 1 | 1.04 1 | 1.11 1 | 01.32 1 | 1.09 1 | 1.03 1 | 1.29 预期产出: pid | biosver |等级 1 | 01.32 |1 1 | 1.29 |2 1 | 1.11 |3 1 | 1.09 |4 像这样….在这种情况下使用窗口densite\u rank()函数 示例: import org.apache

如何计算十进制值的danse_秩

我有如下输入值: pid | biosver| 1 | 1.01 1 | 1.04 1 | 1.11 1 | 01.32 1 | 1.09 1 | 1.03 1 | 1.29

预期产出: pid | biosver |等级 1 | 01.32 |1 1 | 1.29 |2 1 | 1.11 |3 1 | 1.09 |4
像这样….

在这种情况下使用
窗口
densite\u rank()
函数

示例:

import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions._

//sample dataframe
val df=Seq((1,1.01),(1,01.32),(1,1.29),(1,1.03)).toDF("pid","biosver")

val w= Window.orderBy(desc("biosver"))

//if your datatype is string then use casting
val w= Window.orderBy(col("biosver").cast("decimal(10,2)").desc)

df.withColumn("Rank",dense_rank().over(w)).show()

//+---+-------+----+
//|pid|biosver|Rank|
//+---+-------+----+
//|  1|   1.32|   1|
//|  1|   1.29|   2|
//|  1|   1.03|   3|
//|  1|   1.01|   4|
//+---+-------+----+

如果列具有01.03.32、1.00、89、01.04.90等数据,则该列具有字符串数据类型。如何计算排名?