Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于Appengine的MapReduce动态查询语言_Java_Google App Engine_Mapreduce - Fatal编程技术网

Java 基于Appengine的MapReduce动态查询语言

Java 基于Appengine的MapReduce动态查询语言,java,google-app-engine,mapreduce,Java,Google App Engine,Mapreduce,我们目前有一个appengine应用程序(java),拥有数百万个实体。我们使用map-reduce框架+cron为仪表板等提供电源,进行了大量报告 但是,我们希望能够在整个数据集上运行临时查询。我们现在的做法是编写mapreduce,部署,运行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")