如何使用输入集
{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 框架,即只有一个 map 阶段和一个 reduce 阶段但没有任何额外功能(例如 CouchDB 的查找)的框架?
最佳答案
具体细节将取决于您的 map-reduce 框架。但想法是这样的。在映射阶段,您发出两种类型的键/值对。 (1, {name:john type:boss})
和 (3, {worker-id:1 name:john type:worker})
。在你的 reduce 阶段,你得到了组合在一起的键的所有值。如果那里有 boss 类型的记录,则删除该记录并填充其他记录的主管姓名。如果没有,则将这些记录丢在地板上。
基本上,您使用这样一个事实,即数据按键分组,然后在 reduce 中一起处理以进行连接。
(在某些 map-reduce 实现中,您逐渐将键/值对放在 reduce 中。在这些实现中,您不能丢弃还没有 boss 的记录,因此您最终需要映射- reduce-reduce 用于最后的过滤步骤。)
关于join - 如何使用 map-reduce 进行查找(或连接)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5752391/