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

推荐订阅源

Y
Y Combinator Blog
博客园_首页
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Help Net Security
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
A
About on SuperTechFans
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
DataBreaches.Net
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
月光博客
月光博客
云风的 BLOG
云风的 BLOG
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
C
Check Point Blog
V
V2EX
T
Tailwind CSS Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog

博客园 - ~大器晚成~

我的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完成上出过程。特此发表此文,希望高人能够给出建议,谢谢