1
我试图理解密集排列和行数之间的区别。每个新窗口分区都从1开始。排列的行数是不是总是从1开始的?任何帮助,将不胜感激火花中密集排列和行数的差异
我试图理解密集排列和行数之间的区别。每个新窗口分区都从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"
)中存在两次。那是当你看到三个功能之间的区别时。
谢谢@丹尼尔。 – John
@丹尼尔这是一个很好的答案,有一个伟大的视觉元素来推动点。 –
@JasonWolosonovich我很欣赏这些反馈。 –