客户数据集将客户id作为关键字,并将客户购买的商品id列表作为价值。商品数据集以商品为关键,以价格为价值。如何根据外键商品的id连接这两个数据集?
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来实现它。有人能帮我吗?非常感谢!
发布于 2012-07-23 20:22:00
检查Data-Intensive Text Processing with MapReduce文档中的Relational Joins
部分。
发布于 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章也讨论了连接。
发布于 2012-07-23 17:54:09
“商品”数据集有多大?如果它足够小,最简单的做法是将其加载到映射器中的内存中(在hashmap中),然后将"Customers“数据集作为您的工作的输入。然后,您可以运行您的作业,并在迭代输入时查找"Goods“。您可以使用分布式缓存将“商品”数据分发到集群中的每个节点。
https://stackoverflow.com/questions/11609649
复制相似问题