我试图理解密集排名和行号之间的区别。每个新窗口分区都从 1 开始。行的排名并不总是从 1 开始吗?任何帮助将不胜感激
最佳答案
区别在于排序列中存在“关系”。检查下面的示例:
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
val df = Seq(("a", 10), ("a", 10), ("a", 20)).toDF("col1", "col2")
val windowSpec = Window.partitionBy("col1").orderBy("col2")
df
.withColumn("rank", rank().over(windowSpec))
.withColumn("dense_rank", dense_rank().over(windowSpec))
.withColumn("row_number", row_number().over(windowSpec)).show
+----+----+----+----------+----------+
|col1|col2|rank|dense_rank|row_number|
+----+----+----+----------+----------+
| a| 10| 1| 1| 1|
| a| 10| 1| 1| 2|
| a| 20| 3| 2| 3|
+----+----+----+----------+----------+
请注意,值“10”在同一窗口内的 col2
中出现两次 (col1 = "a"
)。这时您就会看到这三个函数之间的差异。
关于apache-spark - Spark中密集等级和行数的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44968912/