java - 如何使用 mapreduce 批量更新满足查询的数据存储实体?

标签 java google-app-engine mapreduce google-cloud-datastore blobstore

我想使用 mapreduce 库来更新满足查询的所有实体。有几个并发症:

  1. 查找要更新的实体的查询检查 a 的值是否 特定属性“property1”包含在一长串值中(~10000 条目)来自 csv 文件
  2. 对于满足查询的每个实体,需要更新另一个属性“property2”,使其等于 csv 文件同一行第二列中的值

我知道如何将 csv 文件上传到 Blobstore 并使用 Blobstore 输入阅读器读取每一行。我还知道使用查询获取实体的数据存储输入读取器。

我的问题是如何创建一个 Mapper 类来尽可能高效地从 Blobstore 读取输入数据、获取数据存储实体并更新它们?

最佳答案

鉴于 property1 的可能值列表很长,使用查询来过滤似乎不是一个好的选择(因为您需要使用 IN 过滤器,实际上是 runs one query per value )

使用 MR 的另一种方法是使用 Map(从 property1property2)将 CSV 加载到内存中,然后触发一个迭代所有实体的 MR 作业,如果他们的 property1 是 map 上键的一部分,则使用映射值修改它。

正如@Ryan B 所说,如果您只想利用批量放置,则不需要为此使用 MR,因为您可以使用 DatastoreService 使用 Iterableput

关于java - 如何使用 mapreduce 批量更新满足查询的数据存储实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27958500/

相关文章:

java - 访问实现接口(interface)的通用枚举的父方法

google-app-engine - gcloud 预览应用程序部署抛出

hadoop - 我无法访问jobhistoryserver网站

Hadoop Streaming 和多个 reducer 步骤,每个步骤之间没有映射器

google-app-engine - GAE 标准迁移到 Go 1.11/1.12 后的缓存

hadoop - 运行本地文件系统目录作为集群中 Mapper 的输入

java - 构建文件 : build. xml 不存在!中央操作系统

Java X509证书颁发者验证

java - BasicStroke 导致偏离中心

java - Google App Engine Java 从备用电子邮件地址发送邮件