我正在为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
。