我有一个 csv,有 100 万行和 3 列,列是 PostAuthor、CommentAuthor、CommentDate。我想要这个示例输出: 帖子作者评论数 [(评论者,日期)(评论者,日期)(评论者,日期)()...]。我在 VM Oracle 上运行
我的输出与示例不同: "A-Jay" [457,[["Barkley","2022-01-20"],["Barkley","2022-01-20"],[ “巴克利”,“2022-01-20”]...等。日期总是一样的。
我的代码是这样的:
%%file task1.py
#!/usr/bin/env python3
from mrjob.job import MRJob
class Comments(MRJob):
def mapper(self,_,line):
columns=line.replace('"', '').split(",")
PostAuthor= columns[0]
CommentAuthor=columns[1]
CommentDate=columns[2]
yield PostAuthor,(1,(CommentAuthor,CommentDate))
def reducer(self,PostAuthor,values):
total_comments=0
comment_list=[]
for value in values:
total_comments+=value[0]
comment_list.append(value[1])
sorted_comments=sorted(comment_list, key=lambda x: x[1], reverse=True)
yield PostAuthor,(total_comments,sorted_comments)
if __name__=='__main__':
Comments.run()
MapReduce 是一种编程模型和处理技术,用于并行处理和生成大型数据集。在 Python 中,您可以使用 functools 模块中的映射和化简函数以及列表推导式和 lambda 函数等功能来实现 MapReduce 作业。