hadoop的map函数使用方法是什么
发表于:2025-01-26 作者:千家信息网编辑
千家信息网最后更新 2025年01月26日,这篇文章主要介绍"hadoop的map函数使用方法是什么",在日常操作中,相信很多人在hadoop的map函数使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2025年01月26日hadoop的map函数使用方法是什么
这篇文章主要介绍"hadoop的map函数使用方法是什么",在日常操作中,相信很多人在hadoop的map函数使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"hadoop的map函数使用方法是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
大表关联小表时可以使用hadoop的DistributedCache把小标缓存到内存中,由hadoop分发这些内存到每台需要map操作的服务器上进行数据的清洗,关联。
例如有这样一份数据用户登陆信息login:
1,0,20121213
2,0,20121213
3,1,20121213
4,1,20121213
1,0,20121114
第一列是用户id,二列是性别,第三列是登陆时间 。
需要将表中的用户id,替换成用户的名字,性别替换成汉字,然后统计他的登陆次数。
其中users表为:
1,张三,hubei
3,王五,tianjin
4,赵六,guangzhou
2,李四,beijing
sex表为:
0,男
1,女
map函数中进行维表的关联,输出为姓名,性别为key,登陆1次为value。
public class Mapclass extends Mapper{ private Map userMap = new HashMap (); private Map sexMap = new HashMap (); private Text oKey = new Text(); private Text oValue = new Text(); private String[] kv; @Override protected void setup(Context context) { BufferedReader in = null; // 从当前作业中获取要缓存的文件 try { Path[] paths = DistributedCache.getLocalCacheFiles(context .getConfiguration()); String uidNameAddr = null; String sidSex = null; for (Path path : paths) { if (path.toString().contains("users")) { in = new BufferedReader(new FileReader(path.toString())); while (null != (uidNameAddr = in.readLine())) { userMap.put(uidNameAddr.split(",", -1)[0], uidNameAddr.split(",", -1)[1]); } } else if (path.toString().contains("sex")) { in = new BufferedReader(new FileReader(path.toString())); while (null != (sidSex = in.readLine())) { sexMap.put(sidSex.split(",", -1)[0], sidSex.split(",", -1)[1]); } } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); } } } @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { kv = value.toString().split(","); // map join: 在map阶段过滤掉不需要的数据 if (userMap.containsKey(kv[0]) && sexMap.containsKey(kv[1])) { oKey.set(userMap.get(kv[0]) + "," + sexMap.get(kv[1])); oValue.set("1"); context.write(oKey, oValue); } }}
reduce函数:
public class Reduce extends Reducer{ private Text oValue = new Text(); @Override protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { int sumCount = 0; for (Text val : values) { sumCount += Integer.parseInt(val.toString()); } oValue.set(String.valueOf(sumCount)); context.write(key, oValue); }}
main函数为:
public class MultiTableJoin extends Configured implements Tool { @Override public int run(String[] args) throws Exception { Job job = new Job(getConf(), "MultiTableJoin"); job.setJobName("MultiTableJoin"); job.setJarByClass(MultiTableJoin.class); job.setMapperClass(Mapclass.class); job.setReducerClass(Reduce.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); String[] otherArgs = new GenericOptionsParser(job.getConfiguration(), args).getRemainingArgs(); // 我们把第1、2个参数的地址作为要缓存的文件路径 DistributedCache.addCacheFile(new Path(otherArgs[0]).toUri(), job.getConfiguration()); DistributedCache.addCacheFile(new Path(otherArgs[1]).toUri(), job.getConfiguration()); FileInputFormat.addInputPath(job, new Path(otherArgs[2])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[3])); return job.waitForCompletion(true) ? 0 : 1; } public static void main(String[] arg0) throws Exception { String[] args = new String[4]; args[0] = "hdfs://172.16.0.87:9000/user/jeff/decli/sex"; args[1] = "hdfs://172.16.0.87:9000/user/jeff/decli/users"; args[2] = "hdfs://172.16.0.87:9000/user/jeff/decli/login"; args[3] = "hdfs://172.16.0.87:9000/user/jeff/decli/out"; int res = ToolRunner.run(new Configuration(), new MultiTableJoin(), args); System.exit(res); }}
计算的输出为:
张三,男 2
李四,男 1
王五,女 1
赵六,女 1
到此,关于"hadoop的map函数使用方法是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
函数
方法
使用方法
用户
学习
登陆
性别
数据
缓存
关联
内存
文件
更多
张三
李四
王五
帮助
输出
实用
接下来
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大专能学计算机网络技术
王者荣耀服务器名
数据库收录作品欣赏
做网络安全
ios开发软件开发
浙江综合系统管理软件开发
股市导航软件开发
有关网络安全儿歌
自助充值机软件开发
数据库系统 第五版 网盘
上海汽车空调控制软件开发公司
幼儿园安全维修保养数据库
网络安全等保2.0正式实施时间
网络安全短篇英语作文
可以检索专利的数据库
金融信用信息基础数据库担保
江苏微型软件开发代理商
中国工业企业数据库在哪里
dnf服务器维护在哪里
sql清理数据库语句
安徽项目软件开发
mssql数据库便宜出租
软件开发展厅
网络安全如何凸显自己的价值
长春软件开发公司哪家好
云服务器设计国家安全吗
DAYZ下载软件开发
网络安全三级保护服务
熟悉网络安全领域
查看数据库的命令及语句是