我有两个数据文件,其中
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的两个哈希集,并且可能得到集合的交集(然后输出该交集)。
问题在于我觉得这不是一种最佳的方法,因为它会在缩减阶段消耗大量内存。这是我迄今为止最好的方法。有更有效的方法吗?
答案 0 :(得分:0)
我有这样的想法:
<强> Maper 强>:
将record1
和record2
任务作为输入,输出如下:
item1\trating
item1\titem2,similarity
<强>减速器强>:
合并与items1
对应的信息,这不会占用太多内存。
item1\titem2\tsimilarity\trating #this is output1
{item1 (from A), item2 (in B), similarity, rating (item1)}
<强>更新强>
只需添加另一个MR
即可解决您的问题。
<强> Maper2 强>:
将record1
和output1
任务作为输入,输出如下:
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)}