1

我在 Google App Engine 中有一个模型,它有 50,000 多个实体。我想创建一个 mapreduce 或其他操作来迭代所有 50,000 多个实体并将模型上的方法的结果导出到文本文件。完成后,我想下载文本文件。

在 Google App Engine 中执行此操作的最简单方法是什么?我只需要遍历所有实体并将expert_data() 的结果写到一个公共文件中。

#Example model
class Car(db.Model):
    color = db.StringProperty()

    def export_data(self):
        return self.color
4

5 回答 5

4

使用 mapreduce API:https ://developers.google.com/appengine/docs/python/dataprocessing/ 。它还有一个 BlobstoreOutputWriter,您可以使用它来创建一个 blob,然后下载该 blob。

根据戴夫的建议,这里是一个例子:http ://code.google.com/p/appengine-mapreduce/source/browse/trunk/python/demo/main.py#264

于 2012-05-23T16:20:32.533 回答
2

我发现使用远程 api 做这种事情是最容易的,否则你将不得不将数据存储在 blobstore 中,然后在完成后将其导出。

远程处理 api 不如在 appengine 本身上运行它快,但它肯定要容易得多。

于 2012-05-23T16:02:29.783 回答
0

我会以不同的方式做到这一点 - 有人请告诉我这里是否有弱点。

我会使用任务队列和游标。查询前 1000 个左右的结果,使用实验性 blobstore 编程写入 API 将数据输出到 blobstore 文件。然后,使用光标重新安排 self 并在每次后续迭代中继续附加到文件并在光标处提取查询,直到完成。

这可能很慢 - 但它不会明显影响正在运行的应用程序,并且与 mapreduce 不同,它不会产生大量实例并可能花费您实际的金钱。它甚至可能不会产生一个额外的实例。

于 2012-05-31T23:17:32.377 回答
0

如果您只需要导出到文件并且想要所有实体,则可以使用 appengine 批量加载器

请参阅 appcfg.py 下载数据

还有 https://developers.google.com/appengine/docs/python/tools/uploadingdata

它处理重试限制线程等

于 2012-06-01T04:24:58.653 回答
0

通过 Datastore Backups 导出到 Google Cloud Storage,然后下载:

http://gbayer.com/big-data/app-engine-datastore-how-to-efficiently-export-your-data/

这看起来比其他方法快得多。我自己没试过。

于 2013-02-17T00:09:49.070 回答