java - Hadoop MapReduce : MapOutputValueClass : Map<String, 字符串>?

标签 java performance hadoop mapreduce

我有一个 Java MR 程序。我的 Map 方法的输出是各种字符串/数字,我现在将其放入字符串中。在Reduce 中,我分割字符串并使用参数。现在我想知道这是否不能更容易地完成。

我正在考虑一个映射,其中我将字符串/数字存储为值,并使用描述每个值的命名键。那么这个 Map 将是我的“Value Out”(MapOutputValueClass)。

这可能吗?当我在文档中读到此内容时,我想我的想法无法实现:

键和值类必须可由框架序列化,因此需要实现 Writable 接口(interface)。此外,关键类必须实现 WritableComparable 接口(interface),以方便框架进行排序。

那么您建议我为 MapOutputValueClass 选择什么? :-) 也许拿一个 Map 并将其转换为 ImmutableBytesWritable ?我也不想减慢我的程序...

感谢您的解答!

最佳答案

您可以使用各种字符串/数字编写自己的类。例如,并将其作为映射器的输出值类和 reducer 的输入值类传递。

Class Foo{
     String A;
     String B;
     int c, d;

      ....
}

在你的映射器中:

public class MyMapper extends Mapper<Text, Text, Text, Foo>{
      ....
}

在你的 reducer 中:

public class MyReducer extends Reducer<Text, Foo, Text, LongWritable>{
       ...
}

在你的驱动程序中:

设置映射器输出值类:

job.setMapOutputValueClass(Foo.class);

记住当你 extends Mapper ,需要填写的类按如下顺序:<KEYIN_CLASS, VALUEIN_CLASS, KEYOUT_CLASS, VALUEOUT_CLASS>Reducer 也是如此

关于java - Hadoop MapReduce : MapOutputValueClass : Map<String, 字符串>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11046619/

相关文章:

java - 为 Spring Boot 应用程序部署新功能的最佳实践是什么?

MySQL查询性能优化

scala - 烫伤:成对比较字符串?

logging - 任何生成高速日志的工具或实用程序

java - 正则表达式差异

java - 为什么我的 ByteArrayInputStream 在从任何字符串创建后为空?

java - Swing中使用row来过滤Jtable

c# - WPF UI 自动化问题

r - 在 R/Rcpp 中转置列表的最快方法

hadoop - HDFS集群的某些datanode在reducers运行时突然断开连接