求解Mapreduce编程问题
part-r-00000文件如下:0 3 5 6 7
1 0 2 5 6
2 6
3 4 1
4 3 7 0 1
5 0 1 6
6 1 5 7
7 3
/**
1.Map读取文件
如第一行 0 3 5 6 7=> 0是key 3 5 6 7 为 value
2.遍历value 3 5 6 7 分别以作为key 到文件中对应的value 如:
3 4 1
5 0 1 6
6 1 5 7
7 3
3.一起传给reduce 如:
0 3 5 6 7
4 3 7 0 1
5 0 1 6 ====>Reduce1
6 1 5 7
7 3
1 0 2 5 6
0 3 5 6 7
2 6 ====>Reduce2
5 0 1 6
6 1 5 7
。。。
7 3
3 4 1
文件很大不宜缓存
**/
protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, IntWritable, Text>.Context context)
throws IOException, InterruptedException {
String[] record = value.toString().split("\t");
String vertex = record;
String neighborhood = record;
context.write(new IntWritable(Integer.valueOf(vertex)), new Text(neighborhood));
String[] neighborhoodList = neighborhood.split(" ");
for(String v : neighborhoodList) {
context.write(new IntWritable(Integer.valueOf(v)), new Text(neighborhood));//这个neighborhood要转换为文件key对应的value
}
} 我的代码 context.write(new IntWritable(Integer.valueOf(v)), new Text( ));new Text( )里面应该是v 对应的 values 目前想到的是读文件放缓存里 但是这个文件很大 kennys 发表于 2018-7-4 15:52
我的代码 context.write(new IntWritable(Integer.valueOf(v)), new Text( ));new Text( )里面应该是v 对 ...
这是要实现什么功能。基本不需要缓存,hdfs本身就是分布式。
reduce1和reduce2还有重复的,这不大可能,楼主对MapReduce理解可能不太透彻。
所以先搞明白自己要实现什么功能。
sstutu 发表于 2018-7-4 16:26
这是要实现什么功能。基本不需要缓存,hdfs本身就是分布式。
reduce1和reduce2还有重复的,这不大可能, ...
就是 读取每行的key 和 values然后遍历values 把values 作为key 寻找文件对应的values然后一起发给reduce 在reduce跑自己的算法 有重复是正常现象 sstutu 发表于 2018-7-4 16:26
这是要实现什么功能。基本不需要缓存,hdfs本身就是分布式。
reduce1和reduce2还有重复的,这不大可能, ...
你可以看做 输入文件是一个邻接矩阵 0是顶点 3 5 6 7 是与0连接的点我想生成的结果是 找到每个顶点的二跳点 以0顶点为例子
0 3 5 6 7
4 3 7 0 1
5 0 1 6
6 1 5 7
7 3
以上为以0为顶点的输出
页:
[1]