Sample Join Analysis
Sample data: student.txt
1,yaoshuya,25
2,yaoxiaohua,29
3,yaoyuanyie,15
4,yaoshupei,26
Sample data:score.txt
1,yuwen,100
1,shuxue,99
2,yuwen,99
2,shuxue,88
3,yuwen,99
3,shuxue,56
4,yuwen,33
4,shuxue,99
输出文件内容:
1 [yaoshuya,25,yuwen,100]
1 [yaoshuya,25,shuxue,99]
2 [yaoxiaohua,29,yuwen,99]
2 [yaoxiaohua,29,shuxue,88]
3 [yaoyuanyie,15,yuwen,99]
3 [yaoyuanyie,15,shuxue,56]
4 [yaoshupei,26,yuwen,33]
4 [yaoshupei,26,shuxue,99]
参数:
args= "-Dio.sort.mb=10
-r 1
-inFormat org.apache.hadoop.mapred.KeyValueTextInputFormat
-outFormat org.apache.hadoop.mapred.TextOutputFormat
-outKey org.apache.hadoop.io.Text
-outValue org.apache.hadoop.mapred.join.TupleWritable
hdfs://namenode:9000/user/hadoop/student/student.txt
hdfs://namenode:9000/user/hadoop/student/score2.txt
hdfs://namenode:9000/user/hadoop/joinout".split(" ");
需要注意的是我使用的输出格式是TextOutputFormat(完全是为了方便观察输出后的数据)
输出的valuetype是org.apache.hadoop.mapred.join.TupleWritable ,这个 类型非常方便,类似于数组类型,可以接受多值。
在源码中添加的一句代码,是用来配置我的数据源文件的keyvalue分隔符是,(comma).
jobConf.set("key.value.separator.in.input.line", ",");
关键代码简析:
job.setInputFormatClass(CompositeInputFormat.class);
job.getConfiguration().set(CompositeInputFormat.JOIN_EXPR,
CompositeInputFormat.compose(op, inputFormatClass,
plist.toArray(new Path[0])));
使用CompositeInputFormat来进行join操作。此类的说明:
/**
* An InputFormat capable of performing joins over a set of data sources sorted
* and partitioned the same way.
*
* A user may define new join types by setting the property
* <tt>mapreduce.join.define.<ident></tt> to a classname.
* In the expression <tt>mapreduce.join.expr</tt>, the identifier will be
* assumed to be a ComposableRecordReader.
* <tt>mapreduce.join.keycomparator</tt> can be a classname used to compare
* keys in the join.
* @see #setFormat
* @see JoinRecordReader
* @see MultiFilterRecordReader
*/
通过op来指定连接类型:inner,outer,tbl等,有其他需要也可以实现。
具体是怎么连接的呢?根据两个source进入mapper的key进行归并连接。所以要求数据源是根据key值有序的。此连接是在map端实现的。
测试中我使用KeyValueTextInputFormat来处理,其默认格式是key\tValue,所以我使用了上面的代码来进行重置这个格式。但如果你的文件不是key放在第一个位置,你就需要自己写FileInputFormat啦。
但明显需要你要处理的数据源都是使用同样的FileInputFormat去读取。
还有一点,这里支持多文件连接,示例中我只使用了两个示例文件,可以添加更多的文件,路径添加到outputdir之前即可。
Sample Join Analysis的更多相关文章
- AE开发实现Spatial Join Analysis
总体网上资料不多,包括esri帮助文档都写的很简单,没有各个string参数如match_option之类的可以输入的string限制,导致在摸索中gp.Execute时报错n回. 结合网上搜集资料及 ...
- Reducejoin sample
示例文件同sample join analysis 之前的示例是使用map端的join.这次使用reduce端的join. 根据源的类别写不同的mapper,处理不同的文件,输出的key都是stude ...
- Arcgis, ArcEngine, Arcgis Server使用开发汇总 索引
ArcGIS系列软件license及安装: Arcgis SDE10.1 和 Arcgis server10.1的授权文件license tnt_esri.dat Arcgis8.1安装license ...
- LINQ查询返回DataTable类型
个人感觉Linq实用灵活性很大,参考一篇大牛的文章LINQ查询返回DataTable类型 http://xuzhihong1987.blog.163.com/blog/static/267315872 ...
- hadoop vs spark
http://www.zhihu.com/question/26568496#answer-12035815 Hadoop首先看一下Hadoop解决了什么问题,Hadoop就是解决了大数据(大到一台计 ...
- 大数据计算框架Hadoop, Spark和MPI
转自:https://www.cnblogs.com/reed/p/7730338.html 今天做题,其中一道是 请简要描述一下Hadoop, Spark, MPI三种计算框架的特点以及分别适用于什 ...
- 标准化数据-StandardScaler
StandardScaler----计算训练集的平均值和标准差,以便测试数据集使用相同的变换 官方文档: class sklearn.preprocessing.StandardScaler(copy ...
- 高可用Hadoop平台-探索
1.概述 上篇<高可用Hadoop平台-启航>博客已经让我们初步了解了Hadoop平台:接下来,我们对Hadoop做进一步的探索,一步一步的揭开Hadoop的神秘面纱.下面,我们开始赘述今 ...
- Spark学习笔记:(一)入门 glance
参考: http://spark.apache.org/docs/latest/quick-start.html 其它资料: http://mojijs.com/2015/04/190845/i ...
随机推荐
- div与>div区别小结
两者之间的区别:例如div span得到的是div下所有的span元素,而div>span则是取得的div下第一级的span元素. 示例代码如下: <!DOCTYPE html> & ...
- sencha动态向容器里添加控件出现重叠问题
sencha动态向容器里添加控件出现重叠问题原因是由于动态生成控件的id有重复导致的.(js取时间到毫秒来做id,放在for里面会出现几个控件id是相同的情况.).解决掉重复id的问题就好了. 版权声 ...
- WCF小结
WCF总结 1.WCF(原代号为Indigo)是一个用于创建和运行分布式系统的技术集合,使用它能创建安全的.可靠的.跨平台的的分布式解决方案.它的面向服务的编程模型,整合了.Net平台下以往全部的分布 ...
- 【JS复习笔记】07 复习感想
好吧,其实<JavaScript语言精粹>后面还简单介绍了代码风格,优美特性,以及包含的毒瘤.糟粕. 但我很快就看完了,发现其实都在前面讲过了,所以就不写了. 至今为止已经算是把JavaS ...
- 变废为宝,将Discuz废弃的cache机制引入到memory体系中
Discuz的source/class/cache目录,代表着相应的缓存机制,但实际上废弃很多年了. Discuz用Memory代表了缓存,里面内置了memcache等多种缓存驱动. 但很多人的开发环 ...
- ViewPager和Fragment的组合使用
如图是效果图用的是Viewpager和fragment来实现的主界面 不过其中的预加载我没有解决 如下是代码代码比较简单 package com.ithello.dingding; import ja ...
- Visual Studio中设置默认VC++路径
菜单"View" -> "Other Windows" -> "Property Manager" 选择对应的配置并修改即可.
- 【Java Saves!】Session 5:计算机器之三--二指禅
人有十指.人类掰着手指头,发明出了0.1.2-9这十个数字.后来手指头不够用了,便发明出数位(个.十.百.千-)和满十进一的规则,称为十进制. 而计算机靠两个手指头工作.在计算机内部,只有0和1两个数 ...
- 我的一个javascript项目的重构历程
一个月前,组内的一个内部使用的浏览器比价插件的前端部分交给我来维护,作为一个老司机我是拒绝的,自己的代码都是坑,还要去给别人填坑,搞笑地说. 呵呵,能拒绝么.... 好好享受吧,骚年...... 第一 ...
- Android中TextView中的文字设置为不同颜色
questionDesTextView=(TextView)findViewById(R.id.question_des); SpannableStringBuilder builder = new ...