2017-07-07 30 views

回答

4

区别是当订购栏中有“关系”。检查下面的例子:

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")中存在两次。那是当你看到三个功能之间的区别时。

+0

谢谢@丹尼尔。 – John

+0

@丹尼尔这是一个很好的答案,有一个伟大的视觉元素来推动点。 –

+0

@JasonWolosonovich我很欣赏这些反馈。 –