c001.txt

------------------------------

filetype|commid|commname|addressid
comm|1|罗湖小区1|1
comm|2|罗湖小区2|1
comm|3|宝安小区1|4
comm|4|南山小区1|3
comm|5|南山小区2|3
comm|6|福田小区1|2
comm|7|福田小区2|2
comm|8|宝安2|4
comm|9|南山3|3

c002.txt

----------------------------

filetype|commid|commname|addressid
comm|10|罗湖小区7|1
comm|11|罗湖小区8|1
comm|12|宝安小区5|4
comm|13|南山小区6|3
comm|14|南山小区7|3
comm|15|福田小区6|2
comm|16|福田小区8|2

a001.txt

-------------------------

filetype|addressid|address
addr|1|罗湖
addr|2|福田
addr|3|南山
addr|4|宝安

输出结果:

-----------------------

commid commname addr
15 福田小区6 福田
16 福田小区8 福田
6 福田小区1 福田
7 福田小区2 福田
13 南山小区6 南山
14 南山小区7 南山
4 南山小区1 南山
5 南山小区2 南山
9 南山3 南山
3 宝安小区1 宝安
8 宝安2 宝安
12 宝安小区5 宝安

----------------------------

代码:

  1. package org.apache.hadoop.examples;
  2.  
  3. import java.io.IOException;
  4. import java.util.ArrayList;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.StringTokenizer;
  8.  
  9. import org.apache.hadoop.conf.Configuration;
  10. import org.apache.hadoop.io.Text;
  11. import org.apache.hadoop.mapreduce.Mapper;
  12. import org.apache.hadoop.mapreduce.Reducer;
  13. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  14. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  15. import org.apache.hadoop.mapreduce.Job;
  16. import org.apache.hadoop.fs.Path;
  17.  
  18. public class TestUnion {
  19.  
  20. public static int count=0;
  21. public static class TestUnionMapper extends Mapper<Object,Text,Text,Text>
  22. {
  23. public void map(Object key,Text values,Context context) throws IOException,InterruptedException
  24. {
  25. if(values.toString().indexOf("filetype")>=0)
  26. {
  27. return;
  28. }
  29. StringTokenizer itr=new StringTokenizer(values.toString(),"|");
  30. String fileType="";
  31. String fileTypeId="";
  32. while(itr.hasMoreTokens())
  33. {
  34. fileType=itr.nextToken();
  35. if(fileType.compareToIgnoreCase("addr")==0)
  36. {
  37. String addressId=itr.nextToken();
  38. String addressName=itr.nextToken();
  39. fileTypeId="2"; //标记为地址
  40. context.write(new Text(addressId),new Text(fileTypeId+"|"+addressName));
  41. }
  42. else if(fileType.compareToIgnoreCase("comm")==0)
  43. {
  44. String commId=itr.nextToken();
  45. String commName=itr.nextToken();
  46. String addressId=itr.nextToken();
  47. fileTypeId="1"; //标记为小区
  48. context.write(new Text(addressId),new Text(fileTypeId+"|"+commId+"|"+commName));
  49. }
  50. }
  51. }
  52. }
  53. public static class TestUnionReducer extends Reducer<Text,Text,Text,Text>
  54. {
  55. public void reduce(Text key,Iterable<Text> values,Context context) throws IOException,InterruptedException
  56. {
  57. List<String> addrs=new ArrayList<String>();
  58. List<String> comms=new ArrayList<String>();
  59. if(count<=0)
  60. {
  61. count++;
  62. context.write(new Text("commid"),new Text("commname addr"));
  63. return;
  64. }
  65. else
  66. {       
  67. for(Text val:values)
  68. {
  69. String []astr=val.toString().trim().split("\\|"); // | 为特殊字符,必须转义
  70. String fileTypeId=astr[0];
  71. if(fileTypeId.compareToIgnoreCase("1")==0) //comm
  72. {
  73. String commId=astr[1];
  74. String commName=astr[2];
  75. comms.add(commId+" "+commName);
  76. }
  77. else if(fileTypeId.compareToIgnoreCase("2")==0) //addr
  78. {
  79. String addr=astr[1];
  80. addrs.add(addr);
  81. }
  82. }
  83. }
  84. if(comms.size()>0 && addrs.size()>0)
  85. {
  86. for(int m=0;m<comms.size();m++)
  87. for(int n=0;n<addrs.size();n++) //其实只有一条记录对应上面的
  88. context.write(new Text(comms.get(m)),new Text(addrs.get(n)));
  89. }
  90. }
  91. }
  92.  
  93. public static void main(String[] args) throws Exception{
  94. // TODO Auto-generated method stub
  95. if(args.length!=2)
  96. {
  97. System.err.println("please input two agrs:<in> <out>");
  98. System.exit(2);
  99. }
  100. Configuration conf=new Configuration();
  101. Job job=new Job(conf,"union data");
  102. job.setJarByClass(TestUnion.class);
  103. job.setMapperClass(TestUnionMapper.class);
  104. job.setReducerClass(TestUnionReducer.class);
  105. //job.setNumReduceTasks(0);
  106. job.setOutputKeyClass(Text.class);
  107. job.setOutputValueClass(Text.class);
  108. FileInputFormat.addInputPath(job,new Path(args[0]));
  109. FileOutputFormat.setOutputPath(job,new Path(args[1]));
  110. System.exit(job.waitForCompletion(true)?0:1);
  111. }
  112.  
  113. }

主要利用了reduce函数相同的KEY值聚合在一起的规则。

hadoop关联文件处理的更多相关文章

  1. eclipse中关联文件设置方法

    在前几次的试验中,只是做了处于应用程序最上层的界面设计,其实还不知程序在运行过程中到底调用了哪些函数,这些函数是怎么实现的,由于搭建环境时没有进行文件关联,所以在环境中无法实现ctrl键+左击鼠标的方 ...

  2. Hadoop HDFS文件常用操作及注意事项

    Hadoop HDFS文件常用操作及注意事项 1.Copy a file from the local file system to HDFS The srcFile variable needs t ...

  3. Delphi 7使用自定义图标关联文件类型

    Delphi 7使用自定义图标关联文件类型 5.2 Delphi编程(40)  版权声明:本文为博主原创文章,未经博主允许不得转载. 在开发过程中,我们经常需要属于自己的文件类型,自定义的后缀名不仅可 ...

  4. Hadoop的文件读写操作流程

    以下主要讲解了Hadoop的文件读写操作流程: 读文件 读文件时内部工作机制参看下图: 客户端通过调用FileSystem对象(对应于HDFS文件系统,调用DistributedFileSystem对 ...

  5. hadoop 提高hdfs删文件效率----hadoop删除文件流程解析

    前言 这段时间在用hdfs,由于要处理的文件比较多,要及时产出旧文件,但是发现hdfs的blocks数一直在上涨,经分析是hdfs写入的速度较快,而block回收较慢,所以分心了一下hadoop删文件 ...

  6. win10 uwp 关联文件

    有时候应用需要打开后缀名为x的文件,那么如何从文件打开应用? 首先,需要打开 Package.appxmanifest 添加一个功能,需要添加最少有名称,文件类型. 上面的图就是我添加jpg 的方法, ...

  7. <Hadoop><SequenceFile><Hadoop小文件>

    Origin 我们首先理解一下SequenceFile试图解决什么问题,然后看SeqFile怎么解决这些问题. In HDFS 序列文件是解决Hadoop小文件问题的一个方法: 小文件是显著小于HDF ...

  8. 一图看懂hadoop分布式文件存储系统HDFS工作原理

    一图看懂hadoop分布式文件存储系统HDFS工作原理

  9. 64位Win7中7zip无法关联文件的问题

    问题1:win7x64中安装了7zip,在解压文件右键打开无法关联文件. 解决方法1:在开始菜单中打开7-zip File Manage->工具 ->选项 ->7-zip 勾选“添加 ...

随机推荐

  1. 关于Unity中网格导航与寻路

    寻路思路 1.烘焙出地形数据,导航数据,区分哪些是路径,哪些是障碍物 2.给要寻路的角色添加寻路的组件,加好了以后就会有速度和目的地之类的参数设置 3.只要设置好目的地,角色就会根据烘焙好的地图自己走 ...

  2. 解决DLNA方案的技术框架

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00000950 Http协议 1.NanoHTTPD是一 ...

  3. Axiom3D:Ogre公告板集与合并批次

    在上文中,我们把Ogre里的网格分解成点线面后,我们要完成一个新的功能,在点上突出显示. 得到顶点位置后,这个功能也就是一个很简单的事,最开始是每个顶点添加一个子节点,节点上添加一个圆点. forea ...

  4. Windows 自带的截屏功能

    有时没登陆QQ,又急需截图,系统自带的截图功能就可以派上用场了. 1.按下键盘上的Print Screen 按钮 2.打开系统自带的画图工具,点击粘贴就可以了.

  5. Java如何显示工作日(周一至周五)的名称?

    在Java中,如何显示工作日(周一至周五)的名称? 此示例使用DateFormatSymbols().DateFormatSymbols类的getWeekdays()方法来显示工作日(周一至周五)的简 ...

  6. List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable

    public class ConvertX { #region 将集合类转换成DataTable /// <summary> /// 将集合类转换成DataTable /// </s ...

  7. ASP.net MVC 文件下载的几种方法

      ASP.net MVC 文件下载的几种方法(欢迎讨论) 在ASP.net MVC 中有几种下载文件的方法前提:要下载的文件必须是在服务器目录中的,至于不在web项目server目录中的文件下载我不 ...

  8. 两个大数组foreach,找出相同的key数量,所用的时间对比

    <?php function microtime_float() { list($usec, $sec) = explode(" ", microtime()); retur ...

  9. ffmpeg把ts文件转m3u8并切片

    Linux_x86_64流媒体环境:nginx + EasyDarwin-master 客户端播放器:VLC media player 下载windows下的ffmepg二进制版本,请进网站http: ...

  10. Lua环境配置和工具介绍

    官网地址:http://www.lua.org/ Lua环境配置方式: (一)环境变量配置方式: (1)官网下载LuaDist,并解压缩到 c:\ (目录可自定义) 例如:C:\ environmen ...