我对Spark和

Scala相对较新.我有一个数据帧,其格式如下:

| Col1 | Col2 | Col3 | Col_4 | Col_5 | Col_TS | Col_7 |

| 1234 | AAAA | 1111 | afsdf | ewqre | 1970-01-01 00:00:00.0 | false |

| 1234 | AAAA | 1111 | ewqrw | dafda | 2017-01-17 07:09:32.748 | true |

| 1234 | AAAA | 1111 | dafsd | afwew | 2015-01-17 07:09:32.748 | false |

| 5678 | BBBB | 2222 | afsdf | qwerq | 1970-01-01 00:00:00.0 | true |

| 5678 | BBBB | 2222 | bafva | qweqe | 2016-12-08 07:58:43.04 | false |

| 9101 | CCCC | 3333 | caxad | fsdaa | 1970-01-01 00:00:00.0 | false |

我需要做的是获取与最新时间戳对应的行.

在上面的示例中,键是Col1,Col2和Col3. Col_TS表示时间戳,Col_7是一个布尔值,用于确定记录的有效性.

我想要做的是找到一种方法来根据键对这些记录进行分组,并保留具有最新时间戳的记录.

所以上面数据帧中的操作输出应该是:

| Col1 | Col2 | Col3 | Col_4 | Col_5 | Col_TS | Col_7 |

| 1234 | AAAA | 1111 | ewqrw | dafda | 2017-01-17 07:09:32.748 | true |

| 5678 | BBBB | 2222 | bafva | qweqe | 2016-12-08 07:58:43.04 | false |

| 9101 | CCCC | 3333 | caxad | fsdaa | 1970-01-01 00:00:00.0 | false |

我提出了一个部分解决方案,但这样我只能返回记录被分组的列键的数据帧,而不是其他列.

df = df.groupBy("Col1","Col2","Col3").agg(max("Col_TS"))

| Col1 | Col2 | Col3 | max(Col_TS) |

| 1234 | AAAA | 1111 | 2017-01-17 07:09:32.748 |

| 5678 | BBBB | 2222 | 2016-12-08 07:58:43.04 |

| 9101 | CCCC | 3333 | 1970-01-01 00:00:00.0 |

有人可以帮我提出用于执行此操作的Scala代码吗?

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐