将double转换为字符串并再返回double,再次渲染零

时间:2015-08-01 12:46:58

标签: java string hadoop mapreduce

我有这个reducer,它接收我处理的可迭代自定义对象

ArrayList<String> rValues = new ArrayList<String>();
ArrayList<String> sValues = new ArrayList<String>();

for (RelationTuple rt : values) {
    if (rt.getRelationName().equals("R")) {
        rValues.add(rt.getRelationName() + "--" + rt.getLocation() + "--" + rt.getHalf() + "--" + rt.getTuple() + "--" + String.valueOf(rt.getJoinAttribute()) + "--" + String.valueOf(rt.getDistance()) + "--" + String.valueOf(rt.getOutKey()));
    }
    else {
        sValues.add(rt.getRelationName() + "--" + rt.getLocation() + "--" + rt.getHalf() + "--" + rt.getTuple() + "--" + String.valueOf(rt.getJoinAttribute()) + "--" + String.valueOf(rt.getDistance()) + "--" + String.valueOf(rt.getOutKey()));
    }
}


for (int i=0; i < rValues.size(); i++) {
    String[] record1Parts = rValues.get(i).split("--");
    for (int j=0; j < sValues.size(); j++) {
        String[] record2Parts = sValues.get(j).split("--");
        if (!record1Parts[0].equals(record2Parts[0]) && (Double.parseDouble(record1Parts[6]) == Double.parseDouble(record2Parts[6]))){
            if (record1Parts[1].equals("home") && record2Parts[1].equals("home")) {
                context.write(NullWritable.get(), 
                        new Text(record1Parts[0] + "," + record1Parts[4] + "," + record1Parts[6] + "," + record2Parts[0] + "," + record2Parts[4] + "," + record2Parts[6]));
            }

数组record1Parts [0]和record2Parts [0]的第一个元素是整个字符串,然后转到输出就好了。我转换为字符串的整数或双精度元素,例如rt.getJoinAttribute()最终以零作为输出。我的字符串和双重转换失去了数字值并产生了零而我做错了什么?我尝试过不使用String.valueOf(...)进行转换,但结果相同。

对reducer来说,对象具有连接属性的值,如1200,关系名称的值,如R和S,连接键的值,这是0到250之间的索引值。所以我可能期望输出记录,如R,1200,10,S,1220,10。但我收到输出记录,如R,0.0,0,S,0.0,0。

0 个答案:

没有答案