我有一个格式为[(ID,Date),(ID,Date)...]的元组列表,日期为datetime格式。作为RDD的示例,我正在使用:
[('1', datetime.date(2012, 1, 01)),
('2', datetime.date(2012, 1, 01)),
('3', datetime.date(2012, 1, 01)),
('4', datetime.date(2012, 1, 01)),
('5', datetime.date(2012, 1, 01)),
('1', datetime.date(2011, 1, 01)),
('2', datetime.date(2013, 1, 01)),
('3', datetime.date(2015, 1, 01)),
('4', datetime.date(2010, 1, 01)),
('5', datetime.date(2018, 1, 01))]
我需要收集ID以及与每个ID关联的最短日期。大概这是一个reduceByKey
动作,但是我无法整理出相关的功能。我猜想我只是在使事情复杂化,但是在标识适当的lambda(或如果reduceByKey
在这种情况下不是最有效的方法)方面会有所帮助。
我已经检查了StackOverflow并找到了类似的答案here,here和here,但是同样,我无法成功修改这些答案以适合我的特定情况。通常,datetime格式似乎会使事情复杂化(datetime格式本身是由于我解析xml的方式所致,因此如果有帮助,我可以回过头将其解析为字符串)。
我尝试了以下操作,并收到每个错误:
[.reduceByKey(min)
-IndexError:元组索引超出范围
[reduceByKey(lambda x, y: (x, min(y)))
-IndexError:元组索引超出范围(如果datetime转换为字符串,或者如果为datetime格式,则为下面的错误)]
[.reduceByKey(lambda x, y: (x[0], min(y)))
-TypeError:'datetime.date'对象不可下标]
我希望最终结果如下:
[('1', datetime.date(2011, 1, 01)),
('2', datetime.date(2012, 1, 01)),
('3', datetime.date(2012, 1, 01)),
('4', datetime.date(2010, 1, 01)),
('5', datetime.date(2012, 1, 01))]
我有一个格式为[(ID,Date),(ID,Date)...]的元组列表,日期为datetime格式。作为RDD的示例,我正在使用:[['1',datetime.date(2012,1,01)),('2',datetime.date(...
我知道了。有几个问题。对于初学者,这是适用的语法。首先(当然创建了SparkSession之后),我将RDD转换为一个数据框,其内容如下: