使用MapReduce运行独立循环

时间:2016-03-03 22:57:43

标签: python hadoop mapreduce hadoop-streaming

我正在开发协同过滤项目,我需要使用大致如下的算法:

itemset = set {item_1, item_2, item_3... item_n}

for (item_1 to item_n)                  // for each item in itemset
{
    for (item_2 to item_n)              // consider item_1's iteration
    {
        x = similarity (item_1, item_2) // calculate similarity of item_1 with item_2
        store x in a file
    }
}

如果以串行方式运行,此代码将在O(n^2)时间内运行。 similarity是一个返回item_xitem_y之间相似性的函数。

我知道我可以在mapreduce范例中运行此代码,因为每个项目 外部 循环 迭代对于项目集中的所有项目是独立的,并且每个映射器可以在O(n)时间内计算1个项目与其他项目的相似度。

但是我不确定如何进行实施。项目集和这些项目的功能都在一个大的单个文件中。我的困惑从那里开始。

我是否让每个映射器将项目特征矩阵存储在自己的内存中?然后每个映射器计算一个项目与其余项目的相似度?我应该如何实施?

我将使用Hadoop-streaming读取我认为的文件。但是,如何在每个映射器中存储其他项目及其功能?我可以使用常规数据结构来存储项目及其功能吗?但每个映射器都不会将其他所有项目作为输入,这是我的困惑。

任何形式的想法,建议或链接到描述如何执行此操作的文章的帮助将不胜感激。 谢谢!

0 个答案:

没有答案