分享

求解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
文件很大不宜缓存
**/

已有(5)人评论

跳转到指定楼层
kennys 发表于 2018-7-4 15:51:17
    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[0];
            String neighborhood = record[1];

            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
            }  
    }
回复

使用道具 举报

kennys 发表于 2018-7-4 15:52:37
我的代码 context.write(new IntWritable(Integer.valueOf(v)), new Text( ));  new Text( )里面应该是v 对应的 values 目前想到的是读文件放缓存里 但是这个文件很大
回复

使用道具 举报

sstutu 发表于 2018-7-4 16:26:36
kennys 发表于 2018-7-4 15:52
我的代码 context.write(new IntWritable(Integer.valueOf(v)), new Text( ));  new Text( )里面应该是v 对 ...

这是要实现什么功能。基本不需要缓存,hdfs本身就是分布式。
reduce1和reduce2还有重复的,这不大可能,楼主对MapReduce理解可能不太透彻。
所以先搞明白自己要实现什么功能。
回复

使用道具 举报

kennys 发表于 2018-7-5 10:19:32
sstutu 发表于 2018-7-4 16:26
这是要实现什么功能。基本不需要缓存,hdfs本身就是分布式。
reduce1和reduce2还有重复的,这不大可能, ...

就是 读取每行的key 和 values  然后遍历values 把values 作为key 寻找文件对应的values  然后一起发给reduce 在reduce跑自己的算法 有重复是正常现象  
回复

使用道具 举报

kennys 发表于 2018-7-5 10:24:06
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为顶点的输出

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条