在hadoop中查找最大整数值(使用java编程)



我最近开始在hadoop中工作,我刚刚学到了一些关于它的基本理论知识。我正在尝试解决一个任务,其中输入应该在文本文件中给出,例如input.txt(1 10 37 5 4 98 100等)

我需要在给定的输入中找到最大的整数(即整数类型)。我正在尝试传递arraylist中的输入,这样我就可以将第一个整数与其他所有整数进行比较(使用for循环)。

程序应该读取输入文件,比如一些随机数100 20 40 90 70,然后输出应该显示为100。我刚刚尝试用map和reduce函数中的wordcount示例修改代码。但由于我刚开始使用hadoop进行编码,所以我不知道自己错在哪里。

1) 有可能用这种方式找到解决方案吗?如果是,我无法在hadoop中创建arraylist,需要一些提示:-)

2) 我们可以只打印"key"而不打印键值对吗?如果是的话,请帮帮我。我试图在reduce函数中编码,因为没有打印它,但我遇到了一些错误。

请给我一些建议,让我可以继续前进。感谢

阅读Hadoop Java API并编写以下函数:

Map: Identity function
Reduce (or Combine): (K, List<V>) -> (K, max(List<V>))

关于您的评论,MapReduce中没有ArrayLists,它们不适合内存。值列表作为迭代器传递,对象通常被重用以节省内存,因此您不能依赖它们的内容来保持不变。

映射器API:http://hadoop.apache.org/docs/r1.1.1/api/org/apache/hadoop/mapreduce/Mapper.html

对于映射器,您可以编写以下函数,或者只使用预先实现的IdentityMapper

public void map(K key, V val, Context context)
throws IOException {
    context.collect(key, val);
}

API减速器:http://hadoop.apache.org/docs/r1.1.1/api/org/apache/hadoop/mapreduce/Reducer.html

您的reduce函数将是(假设V implements Comparable<V>),为了简洁起见,我们将说值至少包含一项:

public void reduce(K key, Iterator<V> values, Context context)
throws IOException {
    V max = values.next();
    while( values.hasNext() ) {
        V current = values.next();
        if( current.compareTo(max) > 0 )
            max = current;
    }
    context.collect(key, max);
}

相关内容

  • 没有找到相关文章

最新更新