问题描述
from mrjob.job import MRJob
import re
Creation_date=re.compile('CreationDate=\"[0-9]*\"[:17]')
class Part2(MRJob):
def mapper(self, _, line):
DateOnly=Creation_date.group(0).split("=")
if(DateOnly > 2013):
yield None, 1
def reducer(self, key, values):
yield key, sum(values)
if __name__ == '__main__':
Part1.run()
我已经为MapReduce Job编写了python代码,其中CreationDate =“ 2010-07-28T19:04:21.300”。 我必须找到创建日期为2014年1月1日或之后的所有日期。 但是我遇到了一个错误。
1楼
( 的结果)没有group
方法:
>>> pattern = re.compile('CreationDate="([0-9]+)"')
>>> pattern.group
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: '_sre.SRE_Pattern' object has no attribute 'group'
为了得到一个 (其中有一方法),你需要来匹配字符串(图案line
使用) (或取决于你的需要):
>>> pattern.search('CreationDate="2013"')
<_sre.SRE_Match object at 0x7fac5c64e8a0>
>>> pattern.search('CreationDate="2013"').group(1) # returns a string
'2013'
Creation_date = re.compile('CreationDate="([0-9]+)"')
def mapper(self, _, line):
date_only = Creation_date.search(line), group(1)
if int(date_only) > 2013:
yield None, 1
注意:修改了正则表达式以将数字部分捕获为一个组。 并将匹配的字符串转换为int(与数字2013比较的字符串没有意义,或者根据Python版本引发异常)
2楼
Creation_date
只是一个正则表达式。
您需要先匹配输入字符串,然后才能呼叫group(0)