package edu.mr; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; public class QuotesMapper extends Mapper<LongWritable,Text,NullWritable,Text>{ @Override protected void map(LongWritable key,Text value,Context context)throws IOException,InterruptedException{ //读取文件中的一行,去掉前后的空格 String line=value.toString().trim(); //通过\t 进行切分,转换成字符串数组 String[] arrLine=line.split("\\t"); if(arrLine.length < 3){ return; } //ID String id=arrLine[0]; //名人名言 String text=arrLine[1]; //作者 String author=arrLine[2]; //默认标签为 none String tags="none"; //如果标签不为空,标签进行重新赋值 if(arrLine.length>3){ tags=arrLine[3]; } //构造新的字符串 StringBuffer sb=new StringBuffer(); sb.append(id).append("\t").append(text).append("\t").append(author).append("\t").append(tags); //写入context context.write(NullWritable.get(),new Text(sb.toString())); } }
时间: 2024-02-14 14:35:25 浏览: 78
这是一个基于Hadoop的MapReduce程序的Mapper类,用于处理名人名言数据集,并将数据写入context中。其中,map()方法接收的是LongWritable、Text类型的输入,输出的是NullWritable、Text类型的键值对。在map()方法中,首先将读取到的一行数据进行切分,获取其中的ID、名人名言、作者和标签等信息,然后通过StringBuffer拼接成新的字符串,最后写入context中。值得注意的是,如果读取到的数据中标签为空,则默认将标签赋值为none。
相关问题
import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class MyMapper extends Mapper<LongWritable, Text, Text, Int
Writable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// Splitting the input line into words
String[] words = value.toString().split(" ");
// Mapping each word with a count of 1
for (String w : words) {
word.set(w);
context.write(word, one);
}
}
}
这是一个 Hadoop MapReduce 程序中的 Mapper 类,用于对输入的文本进行分词,并对每个单词进行计数。其中 LongWritable 表示输入的键类型,Text 表示输入的值类型,Text 表示输出的键类型,IntWritable 表示输出的值类型。在 map 方法中,将输入的文本按空格切分成单词,然后将每个单词映射成键值对,键为单词,值为 1。最后通过 context.write 方法输出键值对。
package hadoop9999.training.exp1; import com.alibaba.fastjson.JSON; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.NullWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; public class ActorBestMoviesMapper extends Mapper<LongWritable, Text, MovieInfo, NullWritable>{ public static final Log log = LogFactory.getLog(ActorBestMoviesMapper.class); @Override protected void map(LongWritable key1, Text value1, Context context) throws IOException, InterruptedException { String val=value1.toString(); MovieInfo m=JSON.parseObject(val, MovieInfo.class); if(m.getActorSet().contains("李治廷")){ log.info(m.getTitle()); context.write(m, NullWritable.get()); } } }
这是一个Hadoop MapReduce程序中的Mapper类,用于实现从输入数据中筛选出演员“李治廷”参演的电影,并将其输出。具体来说,它接受的输入键值对类型为LongWritable和Text,表示输入文件中每行的偏移量和内容。在map()方法中,它首先将输入数据解析成一个MovieInfo对象,然后检查该电影的演员列表中是否包含“李治廷”,如果包含,则输出该电影对象作为键,NullWritable.get()作为值,以便在Reduce过程中对电影进行排序和去重。同时,它还使用了Log4j2日志框架记录每个被筛选出的电影标题,以便进行调试和监控。
阅读全文