首页 > 解决方案 > 如何在 RDD 中选择每个键的最旧时间的数据?

问题描述

我有一个带有两个变量的 RDDIDtime. 是格式timedatetime.datetime这是RDD数据的头部扫描:

 [[41186, datetime.datetime(2014, 3, 1, 20, 48, 5, 630000)],
 [32036, datetime.datetime(2014, 3, 2, 0, 25, 41, 950000)],
 [41186, datetime.datetime(2014, 3, 2, 0, 31, 29, 380000)],
 [40479, datetime.datetime(2014, 3, 2, 0, 39, 6, 800000)],
 [4598, datetime.datetime(2014, 3, 2, 1, 48, 47, 430000)]]

一个ID会在数据文件中以不同的日期时间出现多次,我只想选择ID时间最远的每一个。

例如,在上面的示例数据中,我只需要选择:

 [[41186, datetime.datetime(2014, 3, 1, 20, 48, 5, 630000)],
 [32036, datetime.datetime(2014, 3, 2, 0, 25, 41, 950000)],
 [40479, datetime.datetime(2014, 3, 2, 0, 39, 6, 800000)],
 [4598, datetime.datetime(2014, 3, 2, 1, 48, 47, 430000)]]

如何编写查询以获取此输出?谢谢你。

标签: pythonpysparkrdd

解决方案


使用groupByKey和应用min

print(rdd.groupByKey().mapValues(min).collect())
#[(41186, datetime.datetime(2014, 3, 1, 20, 48, 5, 630000)),
# (32036, datetime.datetime(2014, 3, 2, 0, 25, 41, 950000)),
# (4598, datetime.datetime(2014, 3, 2, 1, 48, 47, 430000)),
# (40479, datetime.datetime(2014, 3, 2, 0, 39, 6, 800000))]

推荐阅读