首页 > 解决方案 > Scala - Spark - 如何获得具有数据框列的不同值和该不同值的第一个日期的新数据框?

问题描述

我有一个具有以下架构的 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 |

有人可以帮我吗?:)谢谢!

标签: scalaapache-spark

解决方案


您可以通过使用spark sql 的数据框上的排名(https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html )来解决它:

用于诸如registerTempTable_sparkContextdf_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 过滤排名列


推荐阅读