2017-07-07 21 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我很欣賞這些反饋。 –