mapreduce,整合数据字典表
这个坑踩了好长。结果却是map方法中的context写错位置,导致错误。
成都创新互联是专业的望城网站建设公司,望城接单;提供成都网站建设、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行望城网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
源数据内容。就是想数据表中的第二列替换成字典表中的第二列。即字典表中的红色,换成字典表的蓝色。
//数据表data.txt
//one 1 two qqq
//two 2 two 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);
}
}
很简单的一个数据替换的小例子。
网站题目:mapreduce,整合数据字典表
分享路径:http://ybzwz.com/article/pdeijp.html