我有两个数据文件,其中
记录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 :
任务record1
和record2
作为输入,输出如下:
item1trating
item1titem2,similarity
减速器:
合并items1
对应的信息,这样不会占用太多内存。
item1titem2tsimilaritytrating #this is output1
{item1 (from A), item2 (in B), similarity, rating (item1)}
只要再加一个MR
就可以解决你的问题了。
Maper2 :
任务record1
和output1
作为输入,输出如下:
item2trating
item2titem1titem2tsimilaritytrating
reducer2 :
填充只出现在一个文件中的items2
。
item1titem2tsimilaritytrating
{item1 (from A), item2 (in B but not in A), similarity, rating (item1)}