使用scala(PageRank)删除密钥中不存在的值

时间:2016-05-15 10:02:08

标签: scala hadoop mapreduce pagerank

我试图通过scala构建一个pagerank算法。

我在这里有一个数据集下载表单http://en.wikipedia.org/wiki/Wikipedia:Database_download

它是一个维基百科数据库。

我已经映射了标题,链接会显示在标题页中,如下所示

graph = 
TitleA, LinkB LinkC LinkD
TitleB, linkC
TitleD, linkA

A,B,C表示它们具有相同的名称,但存在于标题区域或链接区域中。

现在,我需要删除标题中不存在的链接。

所以,输出应该是

corgraph = 
TitleA, LinkB LinkD
TitleB, linkC
TitleD, linkA

从titleA中删除LinkC。

这是我的参考代码

val graph = lines.flatMap (line => {
        val titlePattern = "<title>(.+?)</title>".r //define regex of title string out from <title> tag
        val linkPattern = "\\[\\[(.+?)([\\|#]|\\]\\])".r  //define regex of link string out from [[]] area          
        val title = titlePattern.findFirstMatchIn(line).get.group(1) // find title by defined regex

        //find all link in pages and do map reduce
        linkPattern.findAllIn(line).matchData.map(link => {
          val corlink = link.group(1).replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&amp;", "&").replaceAll("&quot;", "\"").replaceAll("&apos;", "\'")
          val cortitle = title.replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&amp;", "&").replaceAll("&quot;", "\"").replaceAll("&apos;", "\'")
          (cortitle -> corlink)
        })               
    }).map{ case(url, link) => if(graph.contains(link))(url -> link)}

错误消息

[error] PageRank.scala:28:recursive value graph needs type
[error] }).map{ case(url, link) => 
if(graph.contains(link))(url -> link)}(url -> link)}
任何人都可以帮忙吗?感谢。

0 个答案:

没有答案