将Java List从Mapper传递给Reducer

时间:2015-12-13 18:16:35

标签: java hadoop collections mapreduce

我正在尝试编写Map Reduce代码,其中mapper采用带逗号分隔的记录值的文件输入,我基于逗号分割行并创建每行的集合,最后将每个集合添加到列表集合。 / p>

我不确定如何将其写入上下文并传递给reducer,或者更具体地说,是什么数据类型用于Map Reduce中的Java List集合。我听说过Array Writable但是无法在我的代码中实现它。 Plz见下面的代码:

create

输入格式为;

public static class Map extends Mapper<LongWritable,Text,Text,IntWritable>
{

    List<HashSet> listA=new CopyOnWriteArrayList<HashSet>();
    Set<Set> finalset=new HashSet();
    Set<String> hs3;

    public void map(LongWritable key, Text value,Context context) throws IOException,InterruptedException 
    {

        String line = value.toString();
        String[] str=line.split(",");
        HashSet<String> hs=new HashSet<>();
         for(int i=0;i<str.length;i++)
         {
             hs.add(str[i]);
         }
         listA.add(hs);


         context.write(key, listtobepassed); //listA in this case
    }

}

更新问题:我正在尝试通过Map Reduce在输入上运行传递闭包程序; 例: 输入

N3H1P7RBS4QM_71,N3H1P7RBS4QM_72,N3H1P7RBS4QM_73
N3H1P7RBS4QM_143,N3H1P7RBS4QM_144,N3H1P7RBS4QM_167046,N3H1P7RBS4QM_328681,N3H1P7RBS4QM_328682
N3H1P7RBS4QM_145,N3H1P7RBS4QM_167047,N3H1P7RBS4QM_328683
N3H1P7RBS4QM_193,N3H1P7RBS4QM_194,N3H1P7RBS4QM_167088,N3H1P7RBS4QM_167089

输出应该是:

Ref1, Ref2, Ref3
Ref3
Ref4, Ref5, Ref6
Ref7, Ref8, Ref9     
Ref9
Ref10, Ref11
Ref11, Ref12

公共输入值合并在一起。

我的Java代码看起来像

Ref1, Ref2, Ref3,Ref4,Ref5,Ref6 Ref7, Ref8, Ref9 Ref10, Ref11, Ref12

public class TestList {

我能够用Java实现输出,但对于大文件来说,它需要花费无限时间,所以想用Map Reduce替换它。

0 个答案:

没有答案