PageRank怎么使用
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章主要讲解了"PageRank怎么使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PageRank怎么使用"吧!PageRank是执行多次连接
千家信息网最后更新 2025年01月27日PageRank怎么使用
这篇文章主要讲解了"PageRank怎么使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"PageRank怎么使用"吧!
PageRank是执行多次连接的一个迭代算法,因此它是RDD分区操作的很好demo,算法维护两个数据集
(pageID,listList) 包含每个页面的相邻页面列表。 (pageID,rank) 包含每个页面的当前排序值, pageRank计算过程大致如下: 将每个页面的排序值初始化为1.0 在每次迭代中,对页面p,向其每个相邻页面(有直接连接的页面)发松一个值为 rank(p)/numNeighbors(p)的贡献值。 将每个页面的排序值设定为 0.15 + 0.85 *contributionsReceived 其中2 跟3 会重复循环几次,在此过程中算法会逐渐收敛于每个页面的实际PageRank值,实际操作中一般迭代10次。
package com.sowhat.spark
import org.apache.spark.rdd.RDD
import org.apache.spark.{HashPartitioner, SparkConf, SparkContext}
/**
* links = (pageID,LinkList)
* ranks = (pageID,rank)
**/
object MyPageRank {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("pagerank")
//创建SparkContext,该对象是提交spark App的入口
val sc = new SparkContext(conf)
val links: RDD[(String, Seq[String])] = sc.objectFile[(String, Seq[String])]("filepwd").partitionBy(new HashPartitioner(100)).persist()
var ranks: RDD[(String, Double)] = links.mapValues(x => 1.0)
for (i <- 0 until 10) {
val totalRDD: RDD[(String, (Seq[String], Double))] = links.join(ranks)
val contributions: RDD[(String, Double)] = totalRDD.flatMap(
{
case (pageID, (links, rank)) => links.map(dest => (dest, rank / links.size))
}
)
ranks = contributions.reduceByKey(_ + _).mapValues(v => 0.15 + 0.85 * v)
}
ranks.saveAsTextFile("ranks")
}
}
算法从ranksRDD的每个元素的值初始化为1.0开始,然后每次迭代都都不断的更新ranks值,其中主要优化部分如下。
linksRDD每次迭代都会跟ranks发生连接操作,因此将大数据集links进行partitionBy 会节约相当多的网络通信优化开销。 跟上面的原因一样,用persist 可以将数据保存早内存中,以供每次迭代使用。 我们在第一次创建ranks时, 我们用mapValues而不是map() 来保留父RDD links的分区方式,这样对第一次连接操作开销减少很多。 循环体中 reduceByKey后使用mapValues 因为reduceByKey已经是哈希分区了,下一次迭代时候效率更快。
建议
:为最大化分区相关优化潜在作用,在无需更改元素键的时候尽量使用 mapValues 或 flatMapValues。
本文使用 mdnice 排版
感谢各位的阅读,以上就是"PageRank怎么使用"的内容了,经过本文的学习后,相信大家对PageRank怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
页面
迭代
算法
数据
学习
排序
元素
内容
实际
开销
时候
第一次
过程
循环
不断
两个
作用
入口
内存
原因
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机网络技术网络协议名称
善颜互联网科技融资情况
上海推广网络技术咨询热线
软件开发转需求工程师的优势
软件开发甲方工作计划
数据库触发器的概述
软件开发在线观看视频缓存
网络技术设备是什么
青浦区信息软件开发要多少钱
湖南工业软件开发制造价格
原神手机怎么登录官方服务器
抖店订单管理系统数据库设计
温州升途软件开发有限公司
数据库的主键是哪个
数据库记录术语
网络安全工程师好就业吗
数据库建完表之后怎么办
曲阜师范大学软件开发
python密码字典生成数据库
请求服务器拒绝403
服务器控件原理
全国网络安全法律法规试题
数据库大写的序号
软件开发公司软件
汇智科技网络技术有限公司
sap b1数据库
万得数据库试用版
在线网络技术服务项目
数据库和服务器连接是什么
求和函数与空值相加数据库