作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的输入数据的关键类是WritableComparable
,它以MapFile
的形式存在。有没有什么方法可以设置最小和最大键值,并且只将记录传输到键值介于两者之间的映射器?
最佳答案
这是不可能的。因为对于 map-reduce 作业,我们只是指定输入。
我们可以做的一件事是,在映射器中编写一个条件。如果键是黑白最小值和最大值,则只处理键值对并将输出发送到 reducer。否则,什么都不做。但即使在这种情况下,我们的 map 阶段也会处理所有输入,而 reduce 阶段只会处理我们指定的键范围。
更好的方法:当在给定输入上运行 map-reduce 作业时,第一个输入将按 InputSplit 拆分这样每个拆分的数据将由一个映射器处理。但是 map() 方法一次需要一条记录作为键值对。是RecordReader的责任处理此作业并呈现面向记录的 View 。
自定义作业的 RecordReader,并覆盖 getCurrentKey()方法,如果键是黑白最小值和最大值,则返回当前键,否则返回 null。
通过这样做,只有键在给定范围内的输入数据的一部分将被发送到 map 方法。
关于Hadoop MapReduce : Is it possible to only use a fraction of the input data as the input to a MR job?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26994147/
我是一名优秀的程序员,十分优秀!