gpt4 book ai didi

java - Hadoop(java)改变Mapper输出值的类型

转载 作者:可可西里 更新时间:2023-11-01 14:44:29 26 4
gpt4 key购买 nike

我正在编写一个映射器函数,它生成一些 user_id 的键,值也是文本类型。这是我的做法

public static class UserMapper extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text userid = new Text();
private Text catid = new Text();

/* map method */
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString(), ","); /* separated by "," */
int count = 0;

userid.set(itr.nextToken());

while (itr.hasMoreTokens()) {
if (++count == 3) {
catid.set(itr.nextToken());
context.write(userid, catid);
}else {
itr.nextToken();
}
}
}
}

然后,在主程序中,我将映射器的输出类设置如下:

    Job job = new Job(conf, "Customer Analyzer");
job.setJarByClass(popularCategories.class);
job.setMapperClass(UserMapper.class);
job.setCombinerClass(UserReducer.class);
job.setReducerClass(UserReducer.class);

job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);

因此,即使我已将输出值的类设置为 Text.class,编译时仍然会出现以下错误:

popularCategories.java:39: write(org.apache.hadoop.io.Text,org.apache.hadoop.io.IntWritable)
in org.apache.hadoop.mapreduce.TaskInputOutputContext<java.lang.Object,
org.apache.hadoop.io.Text,org.apache.hadoop.io.Text,
org.apache.hadoop.io.IntWritable>
cannot be applied to (org.apache.hadoop.io.Text,org.apache.hadoop.io.Text)
context.write(userid, catid);
^

根据这个报错,还在考虑这种格式的mapper类:write(org.apache.hadoop.io.Text,org.apache.hadoop.io.IntWritable)

所以,当我如下更改类定义时,问题就解决了。

 public static class UserMapper extends Mapper<Object, Text, Text, Text> {

}

所以,我想了解类定义和设置映射器输出值类之间的区别。

最佳答案

在您的映射器类定义中,您将 outputValue 类设置为 IntWriteable。

public static class UserMapper extends Mapper<Object, Text, Text, IntWritable>

但是,在映射器类中,您将 catId 实例化为 Text。

private Text catid = new Text();

即使您已将 MapOutputValueClass 设置为文本,您仍需要更改映射器类的定义以与驱动程序中设置的键和值输出类同步。

关于java - Hadoop(java)改变Mapper输出值的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35762385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com