kennys 发表于 2018-7-4 15:48:46

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

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;
            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
            }
    }

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为顶点的输出

页: [1]
查看完整版本: 求解Mapreduce编程问题