首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
Hadoop如何实现多表的join?两个表,三个表甚至更多的
[问答题]
Hadoop如何实现多表的join?两个表,三个表甚至更多的时候。
查看答案及解析
添加笔记
邀请回答
收藏(19)
分享
纠错
1个回答
添加回答
2
推荐
栀艾柠檬香
每个数据集每条记录按照特定字符进行分割,一行表示一条数据。
默认输出为每张表除joinkey以为的所有字段
1、既然是多个表,路径一般是xxx.db/tab/xxx形式
2、job可以接收多个数据集,获取xxx.db/tab/xxx的关键部分比如 xxx.db_tab,按照顺序放入conf.
conf.set(xxx.db.tab.tag,tag)---tag根据数据集顺序递增。
3、写一个通用Mapper。Mapper的setup获取数据分片所属路径,找出xxx.db/tab/xxx关键部分,获取tag
,同样地方式设置需求jion的字段下标conf.set(xxx.db.tab.join,idxs)--idxs表示按照特定字符分割后取数据的下标
4、自定义Writeable(JoinKeyPair),包括两个字段 joinkey(String类型),tag(int类型)。实现SortCompartor类,和GroupCompartor类,这两个类都实现RawComparator接口,实现按字节流排序。
5、map函数实现 根据下标idxs 取出 joinkey,取出剩余字段,map输出为 JoinKeyPair,value
6、Reduce只需按照相同顺序 取出后拼接输出即可(如果是多对多、一对多情况不同)
如果是制定输出表的字段,可在conf.set(xxx.db.tab.out,idxs)。
编辑于 2015-02-04 15:32:16
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Hadoop/Spark
百度
上传者:
梦朝思夕
难度:
1条回答
19收藏
19725浏览
热门推荐
相关试题
仅用O(1)的空间,将整数数组按奇...
百度
2011
C++
Java
编程基础
Java工程师
C++工程师
评论
(27)
来自
百度2011研发工程师笔试卷
判断一个括号字符串是否匹配正确,如...
百度
2011
栈
Java工程师
C++工程师
评论
(34)
来自
百度2011研发工程师笔试卷
描述map-reduce的执行过程...
腾讯
Hadoop/Spark
评论
(2)
月月查华华的手机
思维题
评论
(7)
在Spring Bean的生命周期...
Spring
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题
1、既然是多个表,路径一般是xxx.db/tab/xxx形式
2、job可以接收多个数据集,获取xxx.db/tab/xxx的关键部分比如 xxx.db_tab,按照顺序放入conf.
conf.set(xxx.db.tab.tag,tag)---tag根据数据集顺序递增。
3、写一个通用Mapper。Mapper的setup获取数据分片所属路径,找出xxx.db/tab/xxx关键部分,获取tag
,同样地方式设置需求jion的字段下标conf.set(xxx.db.tab.join,idxs)--idxs表示按照特定字符分割后取数据的下标
4、自定义Writeable(JoinKeyPair),包括两个字段 joinkey(String类型),tag(int类型)。实现SortCompartor类,和GroupCompartor类,这两个类都实现RawComparator接口,实现按字节流排序。
5、map函数实现 根据下标idxs 取出 joinkey,取出剩余字段,map输出为 JoinKeyPair,value
6、Reduce只需按照相同顺序 取出后拼接输出即可(如果是多对多、一对多情况不同)
如果是制定输出表的字段,可在conf.set(xxx.db.tab.out,idxs)。