关于spark处理重复数据的问题

编写Scala程序读取数据,对属性列”ID”的重复样本,以重复样本记录的“A_Day”与”B_Day”的属性均值分别作为这两个属性的值,并删除多于样本,保留“updata_at”值最近的那条样本。

截取其中一段数据参考:

|ID      |      A_day          |     B_day     |      updated_at|
|     F52H07K57767|         490|         570|2021-01-01 00:01:39|
|     F13K29U03403|         195|         174|2021-01-01 00:03:01|
|          5407440|         719|         281|2021-01-01 00:35:55|
|          5639561|         466|         661|2021-01-01 00:39:01|
|              IDD|         776|         910|2021-01-01 00:59:09|
|           354742|         140|         302|2021-01-01 01:01:48|
|          5733125|         560|         437|2021-01-01 01:32:32|
|          5570481|         719|         672|2021-01-01 01:41:33|
|          2399753|         152|         919|2021-01-01 02:00:10|
|     F51H05V40843|         218|         758|2021-01-01 02:03:20|
|          7570479|         154|         896|2021-01-01 02:08:40|
|              IDD|         436|         376|2021-01-01 02:16:38|
|              IDD|         405|         881|2021-01-01 02:34:03|
|     F08H23A41967|         314|         429|2021-01-01 02:45:23|
|     G51H17X52293|         354|         116|2021-01-01 02:48:03|
|          1661145|         386|         834|2021-01-01 03:06:46|
|          1826503|         356|         695|2021-01-01 03:18:43|
|          6705583|         608|         727|2021-01-01 03:18:18|
|     F55H07N56780|         597|         449|2021-01-01 03:31:40|
|          2192242|         160|         675|2021-01-01 03:58:36|

清洗掉查重数据

SELECT * FROM
(SELECT ROW_NUMBER()OVER(PARTITION BY ID ORDER BY updated_at DESC) RO ,*
FROM 表 ) A WHERE A.RO = 1