Map 中的 Pair 类减少抛出错误
Posted
技术标签:
【中文标题】Map 中的 Pair 类减少抛出错误【英文标题】:Pair class in Map reduce throwing error 【发布时间】:2014-11-03 17:49:24 【问题描述】:为什么 Pair 类在下面的代码中抛出错误
import java.io.IOException;
import java.util.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.commons.lang3.tuple.*;
public static class PrizeMapper extends Mapper<LongWritable, Text, Text, Pair>
int rating = 0;
Text CustID;
IntWritable r;
Text MovieID;
public void map(LongWritable key, Text line, Context context
) throws IOException, InterruptedException
String line1 = line.toString();
String [] fields = line1.split(":");
if(fields.length > 1)
String Movieid = fields[0];
String line2 = fields[1];
String [] splitline = line2.split(",");
String Custid = splitline[0];
int rate = Integer.parseInt(splitline[1]);
r = new IntWritable(rate);
CustID = new Text(Custid);
MovieID = new Text(Movieid);
// CustID.set(Custid);
//MovieID.set(Movieid);
context.write(MovieID,new Pair(CustID,r));
else
return;
public static class IntSumReducer extends Reducer<Text,Pair,Text,Pair>
private IntWritable result = new IntWritable();
public void reduce(Text key, Pair values, Context context) throws IOException, InterruptedException
context.write(key, values);
错误: 找不到标志 [javac] 扩展映射器 [javac] ^ [javac] 符号:类对 [javac] 位置: 找不到标志 [javac] 扩展 Reducer [javac] ^ [javac] 符号:类对
【问题讨论】:
你有Pair
的导入吗?您没有在(严重缩进的)代码中显示 任何 导入。
什么是“对”?我不认为Hadoop中有这样一个类,扩展Writable。因此,它应该是您定义的一个类,并且它还应该扩展 Writable,因为它被用作一个值。
非常感谢您的回复。我已经添加了 import org.apache.commons.lang3.tuple.* 语句(在网上浏览)但是它抛出错误,你能建议我需要添加哪个 import 语句。
非常感谢 JonSkeet Skeet 和 @Vefthym,您的建议对我帮助很大。我想接受您的建议作为答案,但它没有作为答案出现。我想可能是因为它的评论很好,非常感谢您的回复。
@Manvi 我已经添加了答案
【参考方案1】:
好吧,Pair
似乎是您定义的一个类,因为它不是标准的 Hadoop Writable 类之一。
问题在于您没有导入它,正如 Jon Skeet 在他的评论中提到的那样。
但是,请记住,由于您将其用作 reduce 输出值,因此它也应该是实现 Writable 接口的类。
【讨论】:
以上是关于Map 中的 Pair 类减少抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
ReactPHP libevent 和 socket_pair 抛出错误
map.insert:pair<enum,vector<*>> 出现“无效参数”错误
解析编译错误:没有匹配函数调用 'std::pair<,>::pair()'