我有多个集合,并且正在根据它们的两个内容通过 mapReduce 创建一个信息集合。在我的 reduce 方法中,我如何根据源集合应用条件逻辑,或者它是否是输出集合中先前存在的键。
将集合 A 缩减为信息集合时:
- 我想对输入集合特定的字段子集的值求和并覆盖这些字段。我不希望信息集合中现有键的值包含在总和中。
- 如果信息集合中存在键,我想只覆盖那些字段,如果键存在,则保留其他字段的值。
将集合 B 合并到信息集合中时:
- 我想有条件地用集合 B 中的字段子集覆盖
- 如果键存在,则保留其他字段的值。
目前我正在尝试以下方法:
- 对于每个发出统一值的源集合,我都有一个映射函数。发出的值有一个字段“source”,它指示它来自哪个集合。
- 我有一个 reduce 函数。它所做的第一件事是创建一个结构类似于统一值的对象。
- 我有一个 finalize 函数,将源字段设置为“final”,表示现有密钥。
- reduce 函数检查源值,并尝试辨别要使用的逻辑。如果 Collection A 进行求和,如果 B 它替换,如果 Final 它尝试遵循合并逻辑。
- 我使用 reduce 选项运行 mapReduce 来更新键。
问题
我最近意识到 finalize 将被多次调用。这消除了我辨别应该在 reduce 中应用什么逻辑的能力。
如何基于源集合应用条件逻辑,或者它是否是我的 reduce 方法中先前存在的键?