惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Cloudflare Blog
A
About on SuperTechFans
腾讯CDC
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google Online Security Blog
Google Online Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Heimdal Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
爱范儿
爱范儿
D
DataBreaches.Net
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Security Archives - TechRepublic
Security Archives - TechRepublic
P
Proofpoint News Feed
P
Privacy International News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Palo Alto Networks Blog
S
SegmentFault 最新的问题
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
T
Tenable Blog
V
V2EX
M
MIT News - Artificial intelligence
Recorded Future
Recorded Future
A
Arctic Wolf
Hacker News - Newest:
Hacker News - Newest: "LLM"
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Stack Overflow Blog
Stack Overflow Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
Google DeepMind News
Google DeepMind News
L
LINUX DO - 热门话题
博客园 - 【当耐特】
博客园 - 叶小钗
S
Securelist
T
Tor Project blog
Forbes - Security
Forbes - Security
O
OpenAI News
IT之家
IT之家
博客园 - Franky

博客园 - ~大器晚成~

我的2012 一个非重点校计算机专业毕业生的求职之路 Vim设置 推荐系统的循序进阶读物(从入门到精通) Hadoop 常见错误汇总 (转载) 信息检索技术——向量空间模型 信息检索技术——布尔检索 排序算法——堆排序 查找算法——找到序列中第二大的数(修正版) 排序算法——快速排序 排序算法——冒泡排序 排序算法——选择排序 牛×的可视化排序 shell常用技巧 排序算法——插入排序 机器学习相关——文本分类综述 大公司 or 小公司 使用gdb进行调试高级篇 使用gdb进行调试中级篇
Hadoop 实现多个数据表的join操作
~大器晚成~ · 2012-03-01 · via 博客园 - ~大器晚成~

今天在使用hadoop时遇到一个需求,要将具有一定关系的若干个大表进行合并join,乍看起来比较困难。但是仔细分析了一下,还是可以比较好的解决问题的。况且在海量数据处理中,这是一个非常普遍常见的需求。因此写下来和大家分享一下。如果哪为仁兄看后有更好的办法,咱们也可以切磋一下。欢迎拍砖,哈哈。

下面描述一下需求,有如下两种数据

数据A

key value1 value2 value3...valuen

数据B

value1 a1 a2 a3....an

value2 b1 b2 b3....bn

...

valuen x1 x2 x3...xn

目标数据

key value1 a1 a2 a3...an value2 b1 b2 b3...bn....valuen x1 x2 x3...xn

也就是要把所有的数据集合并在一行。当然,所有的数据都是海量的,上TB的数据,显然无法单机进行合并。于是本人想了个办法,在hadoop集群上使用两轮mapreduce完成,下面附上方法,欢迎拍砖。

第一轮的map

使用valuen做为key,红色为key, 整行数据作为value,即

value1 1 key value1 value2 value3...valuen

value2 1 key value1 value2 value3...valuen

...

valuen 1 key value1 value2 value3...valuen

value1 2 a1 a2 a3....an

value2 2 b1 b2 b3....bn

...

valuen 2 x1 x2 x3...xn

第一轮reduce

经过map阶段,标准输入数据应该是下面的格式。(为什么就不用我说了吧,如果大家不明白,建议先看一下mapreduce的机制,可以参见之前的文章)

value1 1 key value1 value2 value3...valuen

value1 2 a1 a2 a3....an

value2 1 key value1 value2 value3...valuen

value2 2 b1 b2 b3....bn

...

valuen 1 key value1 value2 value3...valuen

valuen 2 x1 x2 x3...xn

进行合并

得到下面的结果

key value1 value2 value3...valuen value1 a1 a2 a3....an

key value1 value2 value3...valuen value2 b1 b2 b3....bn

...

第二轮map

继续以key value1 value2 value3...valuen整行为key,打印输出

key value1 value2 value3...valuen value1 a1 a2 a3....an

key value1 value2 value3...valuen value2 b1 b2 b3....bn

...

第二轮reduce

将上面的结果直接进行合并之后,整理输出格式,就可以得到预期的数据了。

想了很久,本人没有找到更好的方法可以少于2轮map-reduce完成上出过程。特此发表此文,希望高人能够给出建议,谢谢