Mapreduce join:如何获取item1=不在数据A中的item1,item2 =在数据A中的item1,ite



我有两个数据文件,其中

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

我希望输出一个记录集,其中记录是{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的两个哈希集进行累加,可能得到集合的交集(然后输出这个交集)。

问题是,我觉得这不是一个最佳的方式,因为它会消耗大量的内存在减少阶段。这是我目前想到的最好的办法。有没有更有效的方法?

我有一个这样的想法:

map :

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

item1trating 
item1titem2,similarity

减速器:

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

item1titem2tsimilaritytrating   #this is output1
{item1 (from A), item2 (in B), similarity, rating (item1)}

只要再加一个MR就可以解决你的问题了。

Maper2 :

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

item2trating 
item2titem1titem2tsimilaritytrating

reducer2 :

填充只出现在一个文件中的items2

item1titem2tsimilaritytrating
{item1 (from A), item2 (in B but not in A), similarity, rating (item1)}

相关内容

  • 没有找到相关文章

最新更新