(精)广东工业大学 2018实时大数据分析——PageRank算法实验报告
一、实验内容
1.采用基于“抽税”法在MapReduce框架下,分析图1的网页PageRank排名;
2.图1中,若节点②和节点⑤是主题节点,采用面向主题的PageRank算法重新计算所有节点的PageRank值。
二、实验设计(原理分析及流程)
三、实验代码及数据记录
1.代码
1.0 文件结构图
1.1 ENode.java
package com.devyy.bean;
public class ENode {
private String name;// 节点名字
private NextNode nextNode;// 指向下一个节点
private int count;// 此链表的数目
private boolean subjectNode = false;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public NextNode getNextNode() {
return nextNode;
}
public void setNextNode(NextNode nextNode) {
this.nextNode = nextNode;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public boolean isSubjectNode() {
return subjectNode;
}
public void setSubjectNode(boolean subjectNode) {
this.subjectNode = subjectNode;
}
}
1.2 NextNode.java
package com.devyy.bean;
public class NextNode {
private int nextLoc;// 下一个节点的数组下标
private NextNode nextNode;// 指向下一个节点
public int getNextLoc() {
return nextLoc;
}
public void setNextLoc(int nextLoc) {
this.nextLoc = nextLoc;
}
public NextNode getNextNode() {
return nextNode;
}
public void setNextNode(NextNode nextNode) {
this.nextNode = nextNode;
}
}
1.3 PageRank.java
package com.devyy.pagerank;
import java.text.DecimalFormat;
import com.devyy.bean.ENode;
import com.devyy.bean.NextNode;
import com.devyy.util.MatrixUtil;
/**
* PageRank是一个函数,它对Web中的网页赋予一个实数值,网页的PageRank值越高,它越“重要”。
* 把Web想象成一个有向图,其中网页是图中节点,当满足如下两个条件时,可直接计算PageRank:
* (1)图是强连通图,即可以从任一节点到达其他节点
* (2)图不存在终止点,即不存在出链的节点。
* 当网页数目为n时构造的n*n的方阵乘以当前概率分布向量之后值不再改变时就到达了极限。
*
* @author ZYY
*
*/
public class PageRank {
private MatrixUtil matrixUtil =new MatrixUtil();
// 根据邻接表构造Web转移矩阵
public double[][] createTransitionMatrixFun(int number, ENode[] node){
int i, index, count, temp;
double[][] transitionMatrix = new double[number][number];
for(i = 0; i < number; i++){
count = node[i].getCount();
temp = count;
index = 0;
NextNode nextNode = node[i].getNextNode();
while(temp-- != 0){
index = nextNode.getNextLoc();
transitionMatrix[index][i] = 1.0 / count;