3

ich Google-Datenspeicher von Google-Datenfluss-Job zu retten versuchen es mir diesen Fehler gibtSpeicher auf Google-Datenspeicher von Google-Datenfluss

My-Code innerhalb des DoFN ist

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()); 
     } 

Der Fehler ist :

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

sieht aus wie es ist keine öffentliche Methode. Mit dem Datastore-Team prüfen, ob es eine Alternative gibt. Vorläufig können Sie diese Methode selbst schreiben: https://github.com/GoogleCloudPlatform/google-cloud-java/blob/master/google-cloud-datastore/src/main/java/com/google/cloud/datastore /BaseEntity.java#L680 –

+1

Filed ein Problem https://github.com/GoogleCloudPlatform/google-cloud-java/issues/1431 –

Antwort

1

Sieht aus wie toPb keine öffentliche Methode. Abgelegt in eine Ausgabe here.

Zur Zeit können Sie diese method selbst implementieren.

0

Konfrontiert mit dem gleichen Problem und dachte, der Ausweg könnte auch anderen helfen.

Ich hatte google-cloud-datastore (Version 0.11.2-beta) als meine Abhängigkeit, die mit datastore-v1-protos-1.0.1 kommen. Und ich glaube, dass die Ursache für das genannte Problem diese lib-spezifische Klasse com.google.datastore.v1.Entity.Builder war, die weder putProperties noch getPropertiesMap nicht unterstützte.

Das Problem besser zu kennen, hat mir geholfen, das Problem konventionell zu sortieren. Ich musste nur sicherstellen, eine neue Abhängigkeit von datastore-v1-protos zu bekommen, die diese fehlenden APIs unterstützt. Daher nur in meiner unten Abhängigkeit hinzugefügt pom.xml

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

diese Änderung einige protobuf Regression könnte schaffen, so ist diese Abhängigkeit in Ihrem pom.xml zu vermeiden, wenn es eine solche ist.

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

Ich denke, das war nicht sein Problem, aber war irgendwie mein Problem. Vielen Dank. – Magritte

+0

Ich bin froh .. es hat jemandem geholfen – abhi