2010-04-02 13 views
7

目前正在Disco上實施PageRank。作爲迭代算法,一次迭代的結果被用作下一次迭代的輸入。迪斯科/ MapReduce:使用先前迭代的結果作爲新迭代的輸入

我有一個大文件,它代表所有的鏈接,每一行代表一個頁面,這些行中的值代表鏈接的頁面。

對於Disco,我將這個文件分成N個塊,然後運行MapReduce一輪。結果,我得到了一組(頁面,等級)元組。

我想喂這個等級到下一個迭代。但是,現在我的映射器需要兩個輸入:圖形文件和網頁排序。

  1. 我想「拉鍊」一起 圖形文件和網頁排名, 使得每一行代表一個 頁面,它的等級,它的出鏈接。
  2. 由於該圖形文件被分離成N個塊,我需要的的PageRank矢量分成N個 並行塊,並且壓縮的區域中的PageRank向量 到圖形 塊

這一切似乎更比必要的複雜,作爲一個非常簡單的操作(用典型的mapreduce算法),似乎我錯過了Disco的一些東西,可以真正簡化方法。

有什麼想法?

回答

1

看起來你會希望使用init_map進行第一遍,然後對每個後續迭代使用iter_map。

請參見:http://discoproject.org/doc/faq.html#id7

你能輸出的Python對象,包括對外連結,而不只是(頁面排名)的元組?

另一種選擇是將outlinks按頁面鍵入某處(dict,memcache,kyotocabinet等),然後從映射函數中查找它們。如果你用Disco鏈接事情,我不認爲你會想在工作流程中壓縮一切東西。