首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
Hadoop如何实现多表的join?两个表,三个表甚至更多的
[问答题]
Hadoop如何实现多表的join?两个表,三个表甚至更多的时候。
添加笔记
邀请回答
收藏(18)
分享
纠错
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条回答
18收藏
19468浏览
热门推荐
相关试题
下列哪些属于分布式文件系统?
腾讯
分布式
Hadoop/Spark
评论
(5)
判断一个括号字符串是否匹配正确,如...
百度
2011
栈
Java工程师
C++工程师
评论
(34)
来自
百度2011研发工程师笔试卷
描述map-reduce的执行过程...
腾讯
Hadoop/Spark
评论
(2)
设某二叉树的先序遍历序列为abdg...
树
评论
(1)
2022 诺瓦科技 Perl re...
perl
System Verilog
评论
(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)。