pagerank算法

Apache Spark源码走读之14 -- Graphx实现剖析

风流意气都作罢 提交于 2020-03-07 12:04:03
欢迎转载,转载请注明出处,徽沪一郎。 概要 图的并行化处理一直是一个非常热门的话题,这里头的重点有两个,一是如何将图的算法并行化,二是找到一个合适的并行化处理框架。Spark作为一个非常优秀的并行处理框架,将一些并行化的算法移到其上面就成了一个很自然的事情。 Graphx是一些图的常用算法在Spark上的并行化实现,同时提供了丰富的API接口。本文就Graphx的代码架构及pagerank在graphx中的具体实现做一个初步的学习。 Google为什么赢得了搜索引擎大战 当Google还在起步的时候,在搜索引擎领域,Yahoo正如日中天,红的发紫。显然,在Google面前的是一堵让人几乎没有任何希望的墙。 但世事难料,现在“外事问谷歌”成了不争的事实,Yahoo应也陪客了。 这种转换到底是如何形成的了,有一个因素是这样的,那就是Google发明了显著提高搜索准确率的PageRank算法。如果说PageRank算法的提出让谷歌牢牢站稳了搜索引擎大战的脚跟,这是毫不夸张的。 搜索引擎有几个要考虑的关键因素(个人观点而已)。 要想吸引用户,就必须要有出色的搜索准确率 有了用户,才能做广告投放,提高广告投放的针对性就可以盈利 上述两个方面都有非常优秀的算法。 废话少述,回到正题。PageRank算法是图论的一个具体应用,ok, 转到图论。 图论简介 图的组成

Spark Graphx编程指南

为君一笑 提交于 2020-03-07 11:59:22
问题导读 1.GraphX提供了几种方式从RDD或者磁盘上的顶点和边集合构造图? 2.PageRank算法在图中发挥什么作用? 3.三角形计数算法的作用是什么? Spark中文手册-编程指南 Spark之一个快速的例子 Spark之基本概念 Spark之基本概念 Spark之基本概念(2) Spark之基本概念(3) Spark-sql由入门到精通 Spark-sql由入门到精通续 spark GraphX编程指南(1) Pregel API 图本身是递归数据结构,顶点的属性依赖于它们邻居的属性,这些邻居的属性又依赖于自己邻居的属性。所以许多重要的图算法都是迭代的重新计算每个顶点的属性,直到满足某个确定的条件。 一系列的graph-parallel抽象已经被提出来用来表达这些迭代算法。GraphX公开了一个类似Pregel的操作,它是广泛使用的Pregel和GraphLab抽象的一个融合。 在GraphX中,更高级的Pregel操作是一个约束到图拓扑的批量同步(bulk-synchronous)并行消息抽象。Pregel操作者执行一系列的超级步骤(super steps),在这些步骤中,顶点从 之前的超级步骤中接收进入(inbound)消息的总和,为顶点属性计算一个新的值,然后在以后的超级步骤中发送消息到邻居顶点。不像Pregel而更像GraphLab

PageRank算法小结

孤街醉人 提交于 2019-12-06 07:51:49
PageRank 这个学期选了数据挖掘的课程,期末要做一个关于链接分析算法的报告,这是PR算法的小结。 算法 PR算法基于等级权威的思想,及不仅考虑指向该网页的链接数,同时也考虑指向该网页网站的重要程度。 PR算法是一种静态的网页评级方法,因为它为每个网页离线计算PR值,与查询内容无关。计算出的PR值即可作为网页排序的依据。 从权威的时角来说,PR值应体现以下的两点: 从一个网页指向另一个网页的链接是一种对目标网站权威性的隐含认可,也就是说,指向一个网页的连接数越多,该网页的PR值也就越高; 指向某个网页w的网页本身也具有PR值。在现实生活中,我们知道被一个高权威的人认可的事比被一个低权威的人认可的更具有可信度。因此,如果一个网页被其他具有高PR值的网页认可,那么该网页的PR值也应该较高。 根据以上的思想,我们可以推导出计算PR值的公式。将网页之间的链接关系看作一个有向图 G(V, E) ,其中V是所有节点(即网页)的集合,E是所有有向边(即超链接)的集合。假设 |V|=n ,PR值的定义如下: \[P(i) = \sum\limits_{(j,i)\in E} \frac{P(j)}{O_j}\] 其中, \(O_j\) 为网页的链出链接数目。根据线性代数的知识,以上的式子可以写成矩阵的形式。 不妨用 P 表示PR值的列向量,令 A 为图 G 的邻接矩阵,有: \[A =

PageRank 算法 Spark实现(Scala & Python)

匿名 (未验证) 提交于 2019-12-02 22:54:36
PageRank PageRank的python版本 #!/usr/bin/env python # -*- coding: utf-8 -*- """ PageRank算法 author = PuLiming 运行: bin/spark-submit files/pagerank.py data/mllib/pagerank_data.txt 10 """ from __future__ import print_function import re import sys from operator import add from pyspark import SparkConf, SparkContext def compute_contribs(urls, rank): """ 给urls计算 Args: urls: 目标url相邻的urls集合 rank: 目标url的当前rank Returns: url: 相邻urls中的一个url rank: 当前url的新的rank """ num_urls = len(urls) for url in urls: yield (url, rank / num_urls) def split_url(url_line): """ 把一行url切分开来 Args: url_line: 一行url,如 1 2 Returns: url,

浅谈PageRank

你说的曾经没有我的故事 提交于 2019-12-02 03:24:27
浅谈PageRank 2017-04-25 18:00:09 guoziqing506 阅读数 17873 更多 https://blog.csdn.net/guoziqing506/article/details/70702449 分类专栏: 机器学习 信息检索 信息检索学习笔记 机器学习经典算法研究 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/guoziqing506/article/details/70702449 1996年,两位还在斯坦福大学攻读计算机理学博士学位的研究生,开始了一项研究:如何对互联网上“成万上亿”的网页进行排序。在当时看来,这只是发生在斯坦福的一个普通课题研究而已,然而包括其研究者在内,都没有意识到,这项研究最后的成果,会引发互联网搜索引擎领域一个划时代的变革。 这两位博士的名字相信大家都很熟悉了,他们正是后来大名鼎鼎的Google公司的创始人:拉里佩奇(Larry Page)和谢尔盖布林(Sergey Brin)。而Google作为全球最大的搜索引擎,在其创立之初,使用的核心算法正是我们今天要讲的PageRank. 搜索引擎的发展瓶颈 搜索引擎的根本用途在于根据用户的查询,快速而准确地从网络的海洋中找到用户最需要的网页

数据挖掘10大算法(1)——PageRank

筅森魡賤 提交于 2019-11-27 01:51:40
1. 前言 这系列的文章主要讲述2006年评出的数据挖掘10大算法(见图1)。文章的重点将偏向于算法的来源以及算法的主要思想,不涉及具体的实现。如果发现文中有错,希望各位指出来,一起讨论。 图1 来自IDMer的文章 在这些算法中,最引人注目的自然是Google的核心技术之一——PageRank。因此本系列就先来探索PageRank的诞生过程。 2. 核心思想 常言道,看一个人怎样,看他有什么朋友就知道了。也就是说,一个人有着越多牛X朋友的人,他是牛X的概率就越大。将这个知识迁移到网页上就是“ 被越多优质的网页所指的网页,它是优质的概率就越大 ”。 PageRank的核心思想就是上述简单却有效的观点。由这个思想,可以得到一个直观的公式: (1) R(x)表示x的PageRank,B(x)表示所有指向x的网页。 公式(1)的意思是一个网页的重要性等于指向它的所有网页的重要性相加之和。粗看之下,公式(1)将核心思想准确地表达出来了。但仔细观察就会发现,公式(1)有一个缺陷:无论J有多少个超链接,只要J指向I,I都将得到与J一样的重要性。当J有多个超链接时,这个思想就会造成不合理的情况。例如:一个新开的网站N只有两个指向它的超链接,一个来自著名并且历史悠久的门户网站F,另一个来自不为人知的网站U。根据公式(1),就会得到N比F更优质的结论。这个结论显然不符合人们的常识。