我有一个具有以下架构的Spark数据框:
________________________
|id | no | date |
|1 | 123 |2018/10/01 |
|2 | 124 |2018/10/01 |
|3 | 123 |2018/09/28 |
|4 | 123 |2018/09/27 |
... 我想要的是一个具有以下数据的新DataFrame:
___________________
| no | date |
| 123 |2018/09/27 |
| 124 |2018/10/01 |
有人可以帮我吗?:)谢谢!!
答案 0 :(得分:0)
您可以通过使用Spark sql在数据帧上使用等级(https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html)来解决该问题:
在registerTempTable
上使用sparkContext
,例如df_temp_table
进行以下查询:
select dftt.*,
dense_rank() OVER ( PARTITION BY dftt.no ORDER BY dftt.date DESC) AS Rank from
df_temp_table as dftt
您将获得以下数据框:
|id | no | date | rank
|1 | 123 |2018/10/01 | 1
|2 | 124 |2018/10/01 | 1
|3 | 123 |2018/09/28 | 2
|4 | 123 |2018/09/27 | 3
在此df上,您现在可以按1过滤等级列
答案 1 :(得分:-1)
欢迎
您可以尝试以下代码:
import org.apache.spark.sql.functions.row_number
import org.apache.spark.sql.expressions.Window
val w = Window.partitionBy($"no").orderBy($"date".asc)
val Resultdf = df.withColumn("rownum", row_number.over(w))
.where($"rownum" === 1).drop("rownum","id")
Resultdf.show()
输出:
+---+----------+
| no| date|
+---+----------+
|124|2018/10/01|
|123|2018/09/27|
+---+----------+