Это пример Python, но я уверен, что вы можете сделать то же самое с Java. Одно из решений, если вы просто хотите считать объекты по фильтрам. Вы можете создать маппер, который обрабатывает фильтры из mapreduce.yaml
- name: Query on Actors
mapper:
handler: mapper_api.query_process
input_reader: google.appengine.ext.mapreduce.input_readers.DatastoreInputReader
params:
- name: entity_kind
value: common.models.Actor
- name: filters
value: age<27, name=toto
Тогда в вашем mapper_api.py
Вы должны взорваться и обработать каждый фильтр:
def query_process(entity):
ctx = context.get()
pms = ctx.mapreduce_spec.mapper.params
filters = pms['filters']
if match(entity, filters):
yield op.counters.Increment("matched")
Так что теперь в вашем / mapreduce вы можете выбрать маппер Query on Actors
и передать ему несколько фильтров.