这个坑踩了好长。结果却是map方法中的context写错位置,导致错误。
为岳阳等地区用户提供了全套网页设计制作服务,及岳阳网站建设行业解决方案。主营业务为成都网站制作、网站设计、岳阳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!源数据内容。就是想数据表中的第二列替换成字典表中的第二列。即字典表中的红色,换成字典表的蓝色。
//数据表data.txt
//one 1two qqq
//two 2two ccc
//字典表zidian.txt
//1男1sex
//2女2sex
//3未知0sex
//4结婚1marry
//5未婚2marry
//6未知0marry
想要的结果就是
男
女
附上代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.filecache.DistributedCache;
import org.apache.hadoop.fs.Path;
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.output.FileOutputFormat;
public class Cache {
public static class Mapall extends Mapper
private Map
private Path[] localFiles;
// 先做分布式缓存处理,将数据换成到内存中
public void setup(Context context) throws IOException {
Configuration conf = context.getConfiguration();
localFiles = DistributedCache.getLocalCacheFiles(conf);
for(int i = 0;i String a ; BufferedReader br = new BufferedReader(new FileReader(localFiles[i].toString())); while ((a = br.readLine()) != null && a.split("\t")[3].equals("sex")) { //以数据作为key,文字作为value sexMap.put(a.split("\t")[2], a.split("\t")[1]); } br.close(); } } @SuppressWarnings("unlikely-arg-type") public void map(Object key, Text value, Context context) throws IOException, InterruptedException { // 获取sex字段,是1,2这样的数据 String sex = value.toString().split("\t")[1]; // 如果key部分有1,2这种形式,就替换成男、女这样的内容 if (sexMap.keySet().equals(sex)) { } context.write(new Text(sexMap.get(sex)), new Text("")); //就是这里,坑我好久的时间。 } } public static class Reduce extends Reducer public void reduce(Text key, Iterator context.write(key, new Text("")); } } public static void main(String[] args) throws URISyntaxException, IOException, ClassNotFoundException, InterruptedException { Configuration conf = new Configuration(); DistributedCache.addCacheFile(new URI("hdfs://192.168.20.39:8020/qpf/zidian.txt"), conf); Job job = Job.getInstance(conf, "get cache file"); job.setJarByClass(Cache.class); job.setMapperClass(Mapall.class); job.setReducerClass(Reduce.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); FileInputFormat.addInputPath(job, new Path("hdfs://192.168.20.39:8020/qpf/data.txt")); FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.20.39:8020/qpf/data_out")); System.exit(job.waitForCompletion(true) ? 0 : 1); } } 很简单的一个数据替换的小例子。 另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享文章:mapreduce,整合数据字典表-创新互联
网站网址:http://www.cdkjz.cn/article/copchd.html