Mapreduce join:如何得到(item1,item2)的集合,其中item1 =不在数据A中,而item2 =在数据A中?

时间:2015-08-11 20:05:22

标签: hadoop mapreduce

我有两个数据文件,其中

  

A = {item1,rating}的记录   记录B = {(item1,item2),similar}

我正在寻找输出一个集合,其中记录的内容类似于{item1(来自A),item2(在B中但在A中),相似性,评级(item1)}形式。

我一直在寻找想法,似乎我可能会对数据集进行缩减端连接..比如

for all item_i in B,
after map: {item_i, [(rating), (item2,sim), (item5, sim) ...]}

并且在reduce中,根据等级的存在累积表示B-A和A的两个哈希集,并且可能得到集合的交集(然后输出该交集)。

问题在于我觉得这不是一种最佳的方法,因为它会在缩减阶段消耗大量内存。这是我迄今为止最好的方法。有更有效的方法吗?

1 个答案:

答案 0 :(得分:0)

我有这样的想法:

<强> Maper

record1record2任务作为输入,输出如下:

item1\trating 
item1\titem2,similarity

<强>减速器

合并与items1对应的信息,这不会占用太多内存。

item1\titem2\tsimilarity\trating   #this is output1
{item1 (from A), item2 (in B), similarity, rating (item1)}

<强>更新

只需添加另一个MR即可解决您的问题。

<强> Maper2

record1output1任务作为输入,输出如下:

item2\trating 
item2\titem1\titem2\tsimilarity\trating

<强> reducer2

过滤仅出现在一个文件中的items2

item1\titem2\tsimilarity\trating
{item1 (from A), item2 (in B but not in A), similarity, rating (item1)}