保存

3

私は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 
+1

はパブリックメソッドではないようです。代替がある場合は、Datastoreチームに確認してください。当面はこの方法を自分で書くことができます。https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/google-cloud-datastore/src/main/java/com/google/cloud/datastore /BaseEntity.java#L680 –

+1

問題提出https://github.com/GoogleCloudPlatform/google-cloud-java/issues/1431 –

答えて

1

が見えます。問題提出here

当面はこのmethodを実装することができます。

0

同じ問題に直面したので、出方が他の人にも役立つかもしれないと考えました。

私はdatastore-v1-protos-1.0.1と出てくる私の依存としてgoogle-cloud-datastore(バージョン0.11.2-beta)でした。そして、私は、上記の問題の根本的な原因は、このlibs固有のクラスcom.google.datastore.v1.Entity.Builderであり、putPropertiesgetPropertiesMapもサポートしていないと考えています。

より良い方法で問題のステートメントが分かっているので、問題を従来どおりに並べ替えることができました。私はちょうどそれらの欠けているAPIをサポートするdatastore-v1-protosの新しい従属を得ることを確認しなければならなかった。したがって、ちょうど私のpom.xml

<dependency> 
     <groupId>com.google.cloud.datastore</groupId> 
     <artifactId>datastore-v1-protos</artifactId> 
     <version>1.3.0</version> 
    </dependency> 

に依存下に追加この変更は、いくつかのいるProtobuf回帰を作成することがありますので、そのようながある場合は、避けるために、あなたのpom.xmlでこの依存関係が含まれます。

<dependency> 
     <groupId>com.google.protobuf</groupId> 
     <artifactId>protobuf-java</artifactId> 
     <version>3.2.0</version> 
    </dependency> 
+0

私はこれが実際に彼の問題ではなかったと思っていますが、私の問題のようなものでした。ありがとう。 – Magritte

+0

私はうれしいです..それは誰かを助けました – abhi