【发布时间】:2016-12-06 22:48:09
【问题描述】:
我有一个巨大的 csv 文件,其中包含 4 个这样的信息:
DF Alice 20.4
MG Bob 30.4
MG Clara 14.3
SP Daniel 40.2
...
我写了一个 Hadoop map-reduce 代码来获取所有表的主要值:
映射器:
public class BolsaFamiliaMapper extends MapReduceBase implements
Mapper<LongWritable, Text, Text, DoubleWritable> {
public void map(LongWritable key, Text value, OutputCollector<Text,
DoubleWritable> output, Reporter reporter) throws IOException { String
valueString = value.toString();
String[] SingleData = valueString.split("\t");
output.collect(new Text("Biggest"), new
DoubleWritable(Double.parseDouble(SingleData[2])));
}
}
减速机:
public class BolsaFamiliaReducer extends MapReduceBase implements Reducer<Text,
DoubleWritable, Text, DoubleWritable> {
public void reduce(Text t_key, Iterator<DoubleWritable> values,
OutputCollector<Text,DoubleWritable> output, Reporter reporter)
throws IOException {
Text key = t_key;
double frequency = 0.0;
while (values.hasNext()) {
// replace type of value with the actual type of our value
DoubleWritable value = (DoubleWritable) values.next();
if (value.get() > frequency) {
frequency = value.get();
}
}
output.collect(key, new DoubleWritable(frequency));
}
}
如果我理解得很好,reduce 执行将不会并行运行,因为我使用的键(“Biggest”)。
有没有更好的方法来获得这些主要价值?
我的另一个疑问是如何获得最大值的元组来检查 UF (SP)。是否可以在同一个 map-reduce 中?如果可能的话,我可以按 UF 对最大值进行分类吗?
我是map-reduce操作和hadoop的初学者,在其他论坛上找不到任何答案。
【问题讨论】:
-
一定要用Java MapReduce吗?为什么不是猪?
-
是的,我有。我正在研究 map-reduce,后者我也会在 Pig 上进行测试。但现在我需要使用 Java MapReduce。
-
我想你在这里问了两个问题......要找到整体的最大价值,我相信你需要一个减速器,是的,因为这将迫使
Iterator<DoubleWritable> values拥有你所有的价值想比较。至于“分组”这个“UF”值。您将"Biggest"替换为SingleData[0] -
谢谢,效果也不错。您对
values的使用非常清楚。实际上我问了两个以上的问题,现在我只需要知道如何检索biggest值的元组。再次感谢。