PageRank在Hadoop和spark下的实现以及对比
package org.apache.hadoop.PageRank; import java.util.ArrayList; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class PageRank { public static void run(){ } public static void main(String[] args) throws Exception {
double factor=0;
if(args.length>1){
factor=Double.parseDouble(args[0]);
}else{
factor=0.85;
}
String input="hdfs://10.107.8.110:9000/PageRank_input";
String output="hdfs://10.107.8.110:9000/PageRank/output";
ArrayList<String> pathList=new ArrayList<String>();
for(int i=0;i<20;i++){
Configuration conf = new Configuration();
conf.set("num","4");
conf.set("factor",String.valueOf(factor));
Job job = Job.getInstance(conf, "PageRank");
job.setJarByClass(org.apache.hadoop.PageRank.PageRank.class);
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.setInputPaths(job, new Path(input));
FileOutputFormat.setOutputPath(job, new Path(output));
input=output;
pathList.add(output);
output=output+1; System.out.println("the "+i+"th iterator is finished");
job.waitForCompletion(true);
}
for(int i=0;i<pathList.size()-1;i++){
Configuration conf=new Configuration();
Path path=new Path(pathList.get(i));
FileSystem fs=path.getFileSystem(conf);
fs.delete(path,true);
}
} } package org.apache.hadoop.PageRank; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; public class MyMapper extends Mapper<LongWritable, Text, Text, Text> { public void map(LongWritable ikey, Text ivalue, Context context)
throws IOException, InterruptedException {
String[] line=ivalue.toString().split(":");
String content=line[1];
int num=content.split(",").length;
String word=line[0].split(" ")[0];
String alaph=line[0].split(" ")[1];
context.write(new Text(word),new Text("content:"+content));
for(String w:content.split(",")){
context.write(new Text(w),new Text("link:"+word+" "+String.valueOf(1.0/num)));
context.write(new Text(w),new Text("alaph:"+word+" "+alaph));
}
} } package org.apache.hadoop.PageRank; import java.io.IOException;
import java.util.HashMap;
import java.util.Map; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; public class MyReducer extends Reducer<Text, Text, Text, Text> { public void reduce(Text _key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
// process values
Configuration conf=context.getConfiguration();
double factor=Double.parseDouble(conf.get("factor"));
int num=Integer.parseInt(conf.get("num")); Map<String,Double> alaph=new HashMap<String,Double>();
Map<String,Double> link=new HashMap<String,Double>(); String content="";
for (Text val : values) {
String[] line=val.toString().split(":");
if(line[0].compareTo("content")==0){
content=line[1];
}else {
String[] s=line[1].split(" ");
double d=Double.parseDouble(s[1]);
if(line[0].compareTo("alaph")==0){
alaph.put(s[0],d);
}else if(line[0].compareTo("link")==0){
link.put(s[0],d);
}
}
}
double sum=0;
for(Map.Entry<String,Double> entry:alaph.entrySet()){
sum+=link.get(entry.getKey())*entry.getValue();
} System.out.println(" ");
System.out.println("sum is "+sum);
System.out.println(" ");
double result=factor*sum+(1-factor)/num;
context.write(_key,new Text(String.valueOf(result)+":"+content)); } }
def f(x):
links=x[1][0]
rank=x[1][1]
n=len(links.split(","))
result=[]
for s in links.split(","):
result.append((s,rank*1.0/n))
return result file="hdfs://10.107.8.110:9000/spark_test/pagerank.txt" data=sc.textFile(file)
link=data.map(lambda x:(x.split(":")[0],x.split(":")[1]))
n=data.count()
rank=link.mapValues(lambda x:1.0/n) for i in range(10):
rank=link.join(rank).flatMap(f).reduceByKey(lambda x,y:x+y).mapValues(lambda x:0.15/n+0.85*x)









PageRank在Hadoop和spark下的实现以及对比的更多相关文章
- Ubuntu14.04或16.04下Hadoop及Spark的开发配置
对于Hadoop和Spark的开发,最常用的还是Eclipse以及Intellij IDEA. 其中,Eclipse是免费开源的,基于Eclipse集成更多框架配置的还有MyEclipse.Intel ...
- hadoop+tachyon+spark的zybo cluster集群综合配置
1.zybo cluster 架构简述: 1.1 zybo cluster 包含5块zybo 开发板组成一个集群,zybo的boot文件为digilent zybo reference design提 ...
- Hadoop与Spark比较
先看这篇文章:http://www.huochai.mobi/p/d/3967708/?share_tid=86bc0ba46c64&fmid=0 直接比较Hadoop和Spark有难度,因为 ...
- 2分钟读懂Hadoop和Spark的异同
谈到大数据框架,现在最火的就是Hadoop和Spark,但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,倒底现在业界都在使用哪种技术?二者间究竟有哪些异同?它们各自解决了哪些问题? ...
- 成都大数据Hadoop与Spark技术培训班
成都大数据Hadoop与Spark技术培训班 中国信息化培训中心特推出了大数据技术架构及应用实战课程培训班,通过专业的大数据Hadoop与Spark技术架构体系与业界真实案例来全面提升大数据工程师 ...
- 安装Hadoop及Spark(Ubuntu 16.04)
安装Hadoop及Spark(Ubuntu 16.04) 安装JDK 下载jdk(以jdk-8u91-linux-x64.tar.gz为例) 新建文件夹 sudo mkdir /usr/lib/jvm ...
- 老李分享:大数据框架Hadoop和Spark的异同 1
老李分享:大数据框架Hadoop和Spark的异同 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...
- hadoop+hive+spark搭建(一)
1.准备三台虚拟机 2.hadoop+hive+spark+java软件包 传送门:Hadoop官网 Hive官网 Spark官网 一.修改主机名,hosts文件 主机名修改 hostnam ...
- 深度:Hadoop对Spark五大维度正面比拼报告!
每年,市场上都会出现种种不同的数据管理规模.类型与速度表现的分布式系统.在这些系统中,Spark和hadoop是获得最大关注的两个.然而该怎么判断哪一款适合你? 如果想批处理流量数据,并将其导入HDF ...
随机推荐
- 【转】ethtool 命令详解
命令描述: ethtool 是用于查询及设置网卡参数的命令. 使用概要:ethtool ethx //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0.eth1等等etht ...
- sessionStorage用于分页,瀑布流和存储用户数据等
在手机网页开发中,会用到分页和瀑布流来分量显示数据.这里会遇到一个问题.当点击某条数据进入详情后,再按手机的返回键会到上一个页面,该页面是重新加载的. 本人在微信里用内置的qq浏览器打开页面,wind ...
- UVALive 7299 Boggle(深搜的姿势)
一开始确实是我的锅,我把题意理解错了,以为是一个q周围没有q的时候才可以当时qu,其实是只要碰到q,他就是qu,所以我们也可以通过预处理的方式,把字典中的不满足qu连在一起的直接去掉. 后来的各种TI ...
- android--listview设置高度
android:layout_height="25dp"这么设置根本就没有用. 我们必须要设置android:minHeight="25dp"这样才行.
- android代码实现免提功能
初始化AudioManager: private static AudioManager audioManager; 实现免提功能方法 protected void setSpeekModle() { ...
- 阅读 LdrInitializeThunk
参考: http://blog.csdn.net/hw_henry2008/article/details/6568255 Windows 的 DLL 装入(除 ntdll.dll 外)和连接是通过 ...
- Safari WebApp 模拟 原声APP禁止打开新窗口JS代码
if(("standalone" in window.navigator) && window.navigator.standalone) { var noddy, ...
- Linux批量替换文本,文件夹内所有文本内容
1.替换文件夹内所有文件匹配的字符串 sed -i "s/旧内容/新内容/g" `grep 旧内容 -rl 文件夹路径` 例如将/var/www/test文件夹下的所有文件内容中的 ...
- centos搭建nginx环境
1.yum install pcre* 2.wget http://nginx.org/download/nginx-1.7.8.tar.gz 3.tar -zxvf nginx-1.7.8.tar ...
- C#获取客服端ip和用户名
. 在asp.Net中专用属性: 获取服务器电脑名:page.server.manchinename 获取用户信息:page.user 获取客户端电脑名:page.request.userhostna ...