我正在尝试编写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替换它。