私はGoogleのデータフロー仕事からGoogleのデータストアに保存しようとしています、それはDoFN内部保存
マイコードは、エラーがある
Datastore datastore= DatastoreOptions.getDefaultInstance().getService();
TrackingRequest rq = gson.fromJson(c.element().toString(), TrackingRequest.class);
Query<Entity> query = Query.entityQueryBuilder().kind("Post").filter(PropertyFilter.eq("postid", rq.postid))
.build();
QueryResults<Entity> posts = datastore.run(query);
if (posts == null || !posts.hasNext()) {
KeyFactory keyFactory = datastore.newKeyFactory().setKind("Post");
Key key = keyFactory.newKey(rq.postid);
Entity entity = Entity.newBuilder(key)
.set("appid", rq.appid)
.set("postid", rq.postid)
.set("title", rq.title)
.build();
datastore.put(entity);
// c.output(((FullEntity<IncompleteKey>)entity).toPb());
}
である私は、このエラーが発生します:toPb
がパブリックメソッドではありませんように
exception: "java.lang.NoSuchMethodError: com.google.datastore.v1.Entity$Builder.putProperties(Ljava/lang/String;Lcom/google/datastore/v1/Value;)Lcom/google/datastore/v1/Entity$Builder;
at com.google.cloud.datastore.BaseEntity.toPb(BaseEntity.java:683)
at com.google.cloud.datastore.DatastoreImpl.put(DatastoreImpl.java:337)
at com.google.cloud.datastore.DatastoreHelper.put(DatastoreHelper.java:55)
at com.google.cloud.datastore.DatastoreImpl.put(DatastoreImpl.java:315)
at com.kryptonz.proccess.KryptonzArchive$RawToObjectConverter.processElement(KryptonzArchive.java:80)
at com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49)
at
はパブリックメソッドではないようです。代替がある場合は、Datastoreチームに確認してください。当面はこの方法を自分で書くことができます。https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/google-cloud-datastore/src/main/java/com/google/cloud/datastore /BaseEntity.java#L680 –
問題提出https://github.com/GoogleCloudPlatform/google-cloud-java/issues/1431 –