public static class SampleMapper extends
Mapper<LongWritable, Text, Text, Text> {
String uuid;
/**
* This method will be called once at the beginning
* of each map task
*/
@Override
protected void setup(Context context) throws IOException,
InterruptedException {
//generate your uuid here
uuid = generateUUID();
}
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
//use uuid here
}
} 在mapredapi的情况下,下面是如何做到这一点的--
public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {
String uuid;
@override
public void configure(JobConf job) {
uuid = gernerateUUID();
}
public void map(LongWritable key, Text value,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
//use uuid here
}
}
1条答案
按热度按时间6fe3ivhb1#
为什么不在每个Map器中使用通用唯一标识符(uuid)?
请检查这个链接,java有这个内置的。
评论后编辑:
如果希望uuid在分割中的所有记录中只生成一次,可以重写mapper类的setup方法,该方法在Map任务开始时只调用一次。生成的uuid可以存储在一个变量中,用于map()函数中的每条记录。
如果您使用的是mapreduceapi,下面介绍了如何做到这一点--
}
在mapredapi的情况下,下面是如何做到这一点的--
这是链接。