我有一個數據框,其中有子類別,並且需要這些子類別中的每一個的最後一個元素。獲取火花2.1.1中的窗口的最後一個元素
val windowSpec = Window.partitionBy("name").orderBy("count")
sqlContext
.createDataFrame(
Seq[(String, Int)](
("A", 1),
("A", 2),
("A", 3),
("B", 10),
("B", 20),
("B", 30)
))
.toDF("name", "count")
.withColumn("firstCountOfName", first("count").over(windowSpec))
.withColumn("lastCountOfName", last("count").over(windowSpec))
.show()
返回我有些奇怪:
+----+-----+----------------+---------------+
|name|count|firstCountOfName|lastCountOfName|
+----+-----+----------------+---------------+
| B| 10| 10| 10|
| B| 20| 10| 20|
| B| 30| 10| 30|
| A| 1| 1| 1|
| A| 2| 1| 2|
| A| 3| 1| 3|
+----+-----+----------------+---------------+
我們可以看到,返回的first
值計算正確,但last
不是,它總是列的當前值。
有人有辦法做我想做的事嗎?
不是 「排序依據」 +「第一/最後「與」最小「/」最大「相同的列 –
可以;但是我仍然與max有相同的行爲。 – Molochdaa
區別在於,使用'max'不需要orderBy,那麼當您僅使用partitionBy定義windowSpec時,它就可以工作。 –