首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在hadoop中根据两个数据集的公共密钥连接它们?

如何在hadoop中根据两个数据集的公共密钥连接它们?
EN

Stack Overflow用户
提问于 2012-07-23 17:20:00
回答 3查看 2.4K关注 0票数 2

客户数据集将客户id作为关键字,并将客户购买的商品id列表作为价值。商品数据集以商品为关键,以价格为价值。如何根据外键商品的id连接这两个数据集?

代码语言:javascript
运行
复制
customer dataset:
customer id, goods id1,goods id2, ...

goods dataset
goods id1, price1
goods id2, price2

The join result dataset I want:
customer id1,price1,price2,...
customer id2,pric3e,price4,...

我是个新手,我知道它可以在Pig和Hive中实现,但我想用java和Hadoop来实现它。有人能帮我吗?非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2012-07-23 20:22:00

检查Data-Intensive Text Processing with MapReduce文档中的Relational Joins部分。

票数 1
EN

Stack Overflow用户

发布于 2012-07-23 21:25:58

也许我可以补充保罗的答案。您可以在这里使用分布式缓存的概念。将较小的文件加载到分布式缓存中,我猜在您的例子中是goods dataset。(Distributed Cache默认最大可容纳10 of数据)。然后,您可以使用法线映射来读取客户数据集,并使用来自分布式缓存的匹配数据执行连接。

有趣的事实是,分布式缓存数据中的数据可以由每个映射器访问,而与datanode无关。

http://bigdatapartnership.com/map-side-and-reduce-side-joins/可以为您提供有关在MapReduce应用程序中加入的见解。

Hadoop:汤姆·怀特的权威指南给出了关于映射侧连接、减少侧连接和使用分布式缓存的连接的程序示例。

Chuck Lam的Hadoop In Action的第5章也讨论了连接。

票数 1
EN

Stack Overflow用户

发布于 2012-07-23 17:54:09

“商品”数据集有多大?如果它足够小,最简单的做法是将其加载到映射器中的内存中(在hashmap中),然后将"Customers“数据集作为您的工作的输入。然后,您可以运行您的作业,并在迭代输入时查找"Goods“。您可以使用分布式缓存将“商品”数据分发到集群中的每个节点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11609649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档