我正在为Map Reduce中的每个数据集制作SVM模型(为此我正在使用LibSVM库)。甚至,我都有每个模型的测试结果。
测试结果文件包含以下详细信息(IT给出了有关测试结果的预测)

+1
-1
+1
+1
..
..
+1

我有这样的5个测试文件。现在,我想在map reduce中使用多数投票来组合测试结果。
在映射阶段,我想将行号作为key的值。如何在所有测试文件的映射阶段中将行号作为值。

最佳答案

我不知道您是否需要MapReduce来执行此任务,但是如果您确实需要在MapReduce中执行此操作,那么我将仅使用仅Map作业,甚至没有输出文件。仅使用两个计数器(我没有找到decrCounter方法,而且incrCounter不能采用负值)。这是一个简单的伪代码:

enum MyCounter = {POSITIVES, NEGATIVES};
map(LongWritable key, Text value, Reporter reporter) {
    if (value.toString().equals("+1")) {
        reporter.incrCounter(MyCounter.POSITIVES, 1);
    } else {
        reporter.incrCounter(MyCounter.NEGATIVES, 1);
    }
}

然后,如果POSITIVES > NEGATIVES,则+1获胜!

如果您不需要MapReduce,则可以只计算所有文件的行数,例如在Linux中使用wc -l命令,然后计算具有+1的行,例如使用grep -c

10-07 17:09