如何使用map-reduce进行查找(或连接)?

时间:2011-04-22 04:52:57

标签: join mapreduce lookup

如何使用输入集

{worker-id:1 name:john supervisor-id:3}
{worker-id:2 name:jane supervisor-id:3}
{worker-id:3 name:bob}

并生成输出集

{worker-id:1 name:john supervisor-name:bob}
{worker-id:2 name:jane supervisor-name:bob}

使用“纯”map-reduce框架,即只有一个地图阶段和一个简化阶段,但没有任何额外功能,如CouchDB的查找?

2 个答案:

答案 0 :(得分:3)

确切的细节将取决于您的map-reduce框架。但这个想法是这样的。在地图阶段,您将发出两种类型的键/值对。 (1, {name:john type:boss})(3, {worker-id:1 name:john type:worker})。在缩减阶段,您将获得组合在一起的键的所有值。如果那里有类型boss的记录,则删除该记录并填充其他记录的supervisor-name。如果没有,那么你将那些记录放在地板上。

基本上,您使用的事实是数据按密钥分组,然后在reduce中一起处理以进行连接。

(在一些map-reduce实现中,你逐步将关键/值对放在reduce中。在这些实现中你不能丢弃那些没有boss的记录,所以你最终需要映射 - 最终过滤步骤的reduce-reduce。)

答案 1 :(得分:0)

只有一个输入文件或更多? 我的意思是,是否有可能我们有一个文件,其 worker-id 之一的 supervisor-id 其描述(该名主管的名字) -id )在另一个文件中?