Hadoop Map Reduce: MapOutputValueClass : Map<String, String>?



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

我在想一个地图,我将我的字符串/数字存储为带有描述每个值的命名键的值。那么这张地图将是我的"Value Out"(MapOutputValueClass)。

这可能吗?当我在文档中读到这篇文章时,我想我的想法是不可实施的:

The key and value classes have to be serializable by the framework and hence need to implement the Writable interface. Additionally, the key classes have to implement the WritableComparable interface to facilitate sorting by the framework.

那么你建议我为我的MapOutputValueClass选择什么?:-)也许拿一个地图并将其转换为不可变字节可写?我也不想减慢我的程序...

感谢您的回答!

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

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

在映射器中:

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

在您的减速机中:

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

在驱动程序中:

设置映射器输出值类:

job.setMapOutputValueClass(Foo.class);

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

相关内容

  • 没有找到相关文章

最新更新