Java 基于Appengine的MapReduce动态查询语言
我们目前有一个appengine应用程序(java),拥有数百万个实体。我们使用map-reduce框架+cron为仪表板等提供电源,进行了大量报告 但是,我们希望能够在整个数据集上运行临时查询。我们现在的做法是编写mapreduce,部署,运行mapreduce,查看结果。我们希望不必执行部署步骤。也就是说,只需转到一些管理界面,指定我们的查询,或者一些自定义代码来进行后期处理,然后查看结果。如果不是每次都要部署,我们会做更多的临时查询Java 基于Appengine的MapReduce动态查询语言,java,google-app-engine,mapreduce,Java,Google App Engine,Mapreduce,我们目前有一个appengine应用程序(java),拥有数百万个实体。我们使用map-reduce框架+cron为仪表板等提供电源,进行了大量报告 但是,我们希望能够在整个数据集上运行临时查询。我们现在的做法是编写mapreduce,部署,运行mapreduce,查看结果。我们希望不必执行部署步骤。也就是说,只需转到一些管理界面,指定我们的查询,或者一些自定义代码来进行后期处理,然后查看结果。如果不是每次都要部署,我们会做更多的临时查询 有人做过这样的事吗?你学到了什么?有什么好的策略吗?这是
有人做过这样的事吗?你学到了什么?有什么好的策略吗?这是一个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
因此,现在在/mapreduce中,您可以选择mapper
查询Actors
并将一些过滤器传递给它。我认为在Java中无法做到这一点。您必须迭代整个数据集。我对此很满意,所以我可能必须编写代码,将这些过滤器作为字符串接收,并将其动态转换为代码,以查看实体是否与过滤器匹配。这必须在……之前完成。。。。
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")