我有一个文本文件(61gb),每行包含一个表示日期的字符串,例如thu dec 16 18:53:32+0000 2010
在单个核心上迭代文件会花费太长时间,因此我想使用pyspark和mapreduce技术快速查找某一年中某一天的行频率。
我认为这是一个好的开始:
import dateutil.parser
text_file = sc.textFile('dates.txt')
date_freqs = text_file.map(lambda line: dateutil.parser.parse(line)) \
.map(lambda date: date + 1) \
.reduceByKey(lambda a, b: a + b)
不幸的是,我不明白如何过滤某一年,并减少关键。关键是今天。
输出示例:
2014年12月16日星期四
12月17日星期四345等。
3条答案
按热度按时间u3r8eeie1#
我应该补充一点,dateutil在python中不是标准的。如果集群上没有sudo权限,这可能会带来问题。作为解决方案,我建议使用datetime:
我对更好的解决方案感兴趣使用:Parquet地板,行/列等。
rjee0c152#
类似这样的事情也许是一个好的开始:
v7pvogib3#
在另一个回答中提到,
dateutil.parser.parse
返回具有year
,month
,和day
属性:从rdd开始:
以下是如何获得所有年-月-日组合的计数:
要获得所需的输出:
如果只想统计某一年,可以在进行统计之前过滤rdd: