优化一个mapreduce代码(reduce侧连接)



我需要你的帮助来优化我的地图代码。我使用了MapReduce design pattern一书中reduce side join的设计模式。所有的工作,但我试图改进代码,不重复键连接期间加入。

实际上键连接在第二个表的值中,所以我想删除它。这就是为什么,我拆分了我的值,并试图删除第一个元素。但我认为这种方法并不是最好的,而且成本很高。

这是我的映射器类:

public class MapTable2 extends Mapper<Object, Text, Text, Text> {
private Text outKey = new Text();
private Text outValue = new Text();
private String tab[];
private List<String> list;
private String tmp ="";
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
    tab = value.toString().split(";");
    list = Arrays.asList(tab);
    outKey.set(list.get(0).trim());
    list.remove(0);
    for (String val : list) {
        tmp = tmp+val;
    }
    outValue.set("B" + tmp);
    context.write(outKey, outValue);
}

}

原代码为:

public class MapTable2 extends Mapper<Object, Text, Text, Text>{
private Text outKey = new Text();
private Text outValue = new Text();
private String tab[] ;
public void map(Object key, Text value, Context context) throws IOException, InterruptedException{

    tab = value.toString().split(";");
    outKey.set(tab[0].trim());
    outValue.set("B" + value.toString()); // outValue = outKey + value
    context.write(outKey, outValue);
}

}

你有什么建议来改进我的代码吗?

提前感谢。Angelik

您可以使用此方法将字符串分成两部分:

String[] parts = value.toString().split(";", 2);
outKey.set(parts[0].trim());
outValue.set("B" + parts[1]);

相关内容

  • 没有找到相关文章

最新更新