以个性化新闻推荐为例,整个过程分成两个mapreduce阶段,由于hadoop流不支持多个mapreduce过程的自动化,所以所有mapreduce过程命令必须人工一个一个的执行。
1、首先需要将原始数据处理成如下形式的两个文件
文件一:Item_user_score.txt
格式:物品—用户—分数
如下图中第一行,物品100655565被用户1634974浏览过,则将分数记为1
文件二:Item_Item_number.txt
格式:物品—物品—相似度
如下图中第二行,物品100654360与物品100650498同时被两个用户浏览过
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)