mapreduce,整合数据字典表

这个坑踩了好长。结果却是map方法中的context写错位置,导致错误。

成都创新互联是专业的望城网站建设公司,望城接单;提供成都网站建设、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行望城网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

源数据内容。就是想数据表中的第二列替换成字典表中的第二列。即字典表中的红色,换成字典表的蓝色。

//数据表data.txt

//one     1     two     qqq

//two     2     two     ccc

//字典表zidian.txt

//11sex

//22sex

//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<Object, Text, Text, Text> {

private Map<String, String> sexMap = new HashMap<String, String>();

private Path[] localFiles;

// 先做分布式缓存处理,将数据换成到内存中

public void setup(Context context) throws IOException {

Configuration conf = context.getConfiguration();

localFiles = DistributedCache.getLocalCacheFiles(conf);

for(int i = 0;i<localFiles.length;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<Text, Text, Text, Text> {

public void reduce(Text key, Iterator<Text> values, Context context) throws IOException, InterruptedException {

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,整合数据字典表
本文网址:https://www.cdcxhl.com/article28/pdeijp.html

成都网站建设公司_创新互联,为您提供网站建设定制开发电子商务微信小程序网页设计公司移动网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

手机网站建设