以个性化新闻推荐为例,整个过程分成两个mapreduce阶段,由于hadoop流不支持多个mapreduce过程的自动化,所以所有mapreduce过程命令必须人工一个一个的执行。
1、首先需要将原始数据处理成如下形式的两个文件
文件一:Item_user_score.txt
格式:物品—用户—分数
如下图中第一行,物品100655565被用户1634974浏览过,则将分数记为1
![]()
![](https://img-blog.csdn.net/20150807222856026?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
文件二:Item_Item_number.txt
格式:物品—物品—相似度
如下图中第二行,物品100654360与物品100650498同时被两个用户浏览过
![]()
![](https://img-blog.csdn.net/20150807222914794?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、矩阵乘法
其实文件一和文件二分别保存着一个矩阵,第二步就是要做矩阵乘法。
step1mapper.py
#!/usr/bin/env python
"""A more advanced Reducer, using Python iterators and generators."""
from itertools import groupby
from operator import itemgetter
import sys
def read_mapper_output(file, separator='\t'):
for line in file:
yield line.strip().split(separator,1)
def main(separator='\t'):
# input comes from STDIN (standard input)