必要なもの:DatastoreIO.v1()を使用してデータフロー(v。1.9.0)でデータストアを読み書きできるようにするための依存関係の正しい組み合わせ.read/writeと、どの依存関係をpomで参照する必要がありますか?データフロー1.9.0用mavenrepoからポンポンで参照Google Cloud Dataflow DatastoreIO読み込みと書き込みの依存関係の問題
データフロー固有の依存関係:
com.google.cloud.dataflow/google-cloud-dataflow-java-sdk-all/1.9.0
com.google.cloud.datastore/datastore-v1-protos/1.0.1
com.google.cloud.datastore/datastore-v1-proto-client/1.1.0
com.google.protobuf/protobuf-java/3.0.0-beta-1
(実際にはエンティティを構築するとき)データストアへの書き込み時に、私は次の例外を取得:
// CamelExecutionException (Setup running with Camel-Routes, but for development purposes not in Fuse but as a local CamelRoute in Eclipse)
Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessageV3
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.google.datastore.v1.Value.toBuilder(Value.java:749)
at com.google.datastore.v1.Value.newBuilder(Value.java:743)
at xmlsource.dataflow.test.EntityUtil.getStringValue(EntityUtil.java:404)
at xmlsource.dataflow.test.EntityUtil.getArticleEntity(EntityUtil.java:152)
at xmlsource.dataflow.test.parser.ArticleToEntity.processElement(ArticleToEntity.java:21)
at com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49)
at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:139)
at com.google.cloud.dataflow.sdk.transforms.ParDo.evaluateHelper(ParDo.java:1229)
at com.google.cloud.dataflow.sdk.transforms.ParDo.evaluateSingleHelper(ParDo.java:1098)
at com.google.cloud.dataflow.sdk.transforms.ParDo.access$300(ParDo.java:457)
at com.google.cloud.dataflow.sdk.transforms.ParDo$1.evaluate(ParDo.java:1084)
at com.google.cloud.dataflow.sdk.transforms.ParDo$1.evaluate(ParDo.java:1079)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner$Evaluator.visitTransform(DirectPipelineRunner.java:858)
at com.google.cloud.dataflow.sdk.runners.TransformTreeNode.visit(TransformTreeNode.java:221)
at com.google.cloud.dataflow.sdk.runners.TransformTreeNode.visit(TransformTreeNode.java:217)
at com.google.cloud.dataflow.sdk.runners.TransformHierarchy.visit(TransformHierarchy.java:103)
at com.google.cloud.dataflow.sdk.Pipeline.traverseTopologically(Pipeline.java:260)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner$Evaluator.run(DirectPipelineRunner.java:814)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner.run(DirectPipelineRunner.java:526)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner.run(DirectPipelineRunner.java:96)
at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:181)
at xmlsource.dataflow.test.PipelineParseTest.createAndRun(PipelineParseTest.java:208)
at xmlsource.dataflow.test.PipelineTester.process(PipelineTester.java:11)
at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
... 8 more
xmlsource.dataflow.test.EntityUtil.getStringValue(EntityUtil.java:404)の参照先行:
Value.newBuilder().setStringValue(value).build();
そして、多かれ少なかれ同じを読ん:
java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessageV3
…
com.google.cloud.datastore/datastore-v1-protos/1.0.1
com.google.cloud.datastore/datastore-v1-proto-client/1.1.0
com.google.protobuf/protobuf-java/3.0.0
と書き込もうと(いるProtobuf-javaのための唯一のないベータ版)への依存関係を変更する場合は、次の例外が発生します:私のコードは緯度経度またはGeoPoint値を設定するために、任意の関数を呼び出すことはありませんしながら、
// CamelExecutionException...
Caused by: java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
com/google/datastore/v1/Value$Builder.mergeGeoPointValue(Lcom/google/type/LatLng;)Lcom/google/datastore/v1/Value$Builder; @76: invokevirtual
Reason:
Type 'com/google/type/LatLng' (current frame, stack[1]) is not assignable to 'com/google/protobuf/GeneratedMessage'
Current Frame:
bci: @76
flags: { }
locals: { 'com/google/datastore/v1/Value$Builder', 'com/google/type/LatLng' }
stack: { 'com/google/protobuf/SingleFieldBuilder', 'com/google/type/LatLng' }
Bytecode:
someBytecode
Stackmap Table:
same_frame(@50)
same_frame(@55)
same_frame(@62)
same_frame(@80)
same_frame(@89)
at com.google.datastore.v1.Value.toBuilder(Value.java:749)
at com.google.datastore.v1.Value.newBuilder(Value.java:743)
at xmlsource.dataflow.test.EntityUtil.getStringValue(EntityUtil.java:404)
at xmlsource.dataflow.test.EntityUtil.getArticleEntity(EntityUtil.java:152)
at xmlsource.dataflow.test.parser.ArticleToEntity.processElement(ArticleToEntity.java:21)
at com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49)
at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:139)
at com.google.cloud.dataflow.sdk.transforms.ParDo.evaluateHelper(ParDo.java:1229)
at com.google.cloud.dataflow.sdk.transforms.ParDo.evaluateSingleHelper(ParDo.java:1098)
at com.google.cloud.dataflow.sdk.transforms.ParDo.access$300(ParDo.java:457)
at com.google.cloud.dataflow.sdk.transforms.ParDo$1.evaluate(ParDo.java:1084)
at com.google.cloud.dataflow.sdk.transforms.ParDo$1.evaluate(ParDo.java:1079)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner$Evaluator.visitTransform(DirectPipelineRunner.java:858)
at com.google.cloud.dataflow.sdk.runners.TransformTreeNode.visit(TransformTreeNode.java:221)
at com.google.cloud.dataflow.sdk.runners.TransformTreeNode.visit(TransformTreeNode.java:217)
at com.google.cloud.dataflow.sdk.runners.TransformHierarchy.visit(TransformHierarchy.java:103)
at com.google.cloud.dataflow.sdk.Pipeline.traverseTopologically(Pipeline.java:260)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner$Evaluator.run(DirectPipelineRunner.java:814)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner.run(DirectPipelineRunner.java:526)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner.run(DirectPipelineRunner.java:96)
at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:181)
at xmlsource.dataflow.test.PipelineParseTest.createAndRun(PipelineParseTest.java:208)
at xmlsource.dataflow.test.PipelineTester.process(PipelineTester.java:11)
at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
ここでの例外は、関数mergeGeoPointValueを参照します。
Query query = Query.newBuilder()
.addKind(KindExpression.newBuilder()
.setName("test_article").build())
.setFilter(Filter.newBuilder()
.setPropertyFilter(PropertyFilter.newBuilder()
.setProperty(PropertyReference.newBuilder()
.setName("somePropertyName"))
.setOp(PropertyFilter.Operator.EQUAL)
.setValue(Value.newBuilder()
.setStringValue("someString").build())
.build())
.build())
.build();
:データストアエンティティ
Value.newBuilder().setStringValue("someString").build()
に全体のクエリをPOJOに変換する際に、再び、私は同じ例外を持って読んだときに私のコードで参照行が再びちょうど文字列値
を設定し、依存関係を変更
(データストア-V1-PROTOS/1.3.0):
com.google.cloud.datastore/datastore-v1-protos/1.3.0
com.google.cloud.datastore/datastore-v1-proto-client/1.1.0
com.google.protobuf/protobuf-java/3.0.0 (or 3.2.0)
// CamelExecutionException
Caused by: java.lang.NoSuchMethodError: com.google.datastore.v1.Query$Builder.clone()Lcom/google/protobuf/GeneratedMessage$Builder;
at com.google.cloud.dataflow.sdk.io.datastore.DatastoreV1$Read$ReadFn.processElement(DatastoreV1.java:648)
at com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49)
at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:139)
at com.google.cloud.dataflow.sdk.transforms.ParDo.evaluateHelper(ParDo.java:1229)
at com.google.cloud.dataflow.sdk.transforms.ParDo.evaluateSingleHelper(ParDo.java:1098)
at com.google.cloud.dataflow.sdk.transforms.ParDo.access$300(ParDo.java:457)
at com.google.cloud.dataflow.sdk.transforms.ParDo$1.evaluate(ParDo.java:1084)
at com.google.cloud.dataflow.sdk.transforms.ParDo$1.evaluate(ParDo.java:1079)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner$Evaluator.visitTransform(DirectPipelineRunner.java:858)
at com.google.cloud.dataflow.sdk.runners.TransformTreeNode.visit(TransformTreeNode.java:221)
at com.google.cloud.dataflow.sdk.runners.TransformTreeNode.visit(TransformTreeNode.java:217)
at com.google.cloud.dataflow.sdk.runners.TransformTreeNode.visit(TransformTreeNode.java:217)
at com.google.cloud.dataflow.sdk.runners.TransformHierarchy.visit(TransformHierarchy.java:103)
at com.google.cloud.dataflow.sdk.Pipeline.traverseTopologically(Pipeline.java:260)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner$Evaluator.run(DirectPipelineRunner.java:814)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner.run(DirectPipelineRunner.java:526)
at com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner.run(DirectPipelineRunner.java:96)
at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:181)
at xmlsource.dataflow.test.PipelineParseTest.createAndRun(PipelineParseTest.java:208)
at xmlsource.dataflow.test.PipelineTester.process(PipelineTester.java:11)
at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
... 8 more
私はデータストアから読み取るしようと行を:この設定で私は正常.apply(DatastoreIO.v1().write().withProjectId("someProjectId"));
読み取ろうとすると、クエリオブジェクトが正常に構築されている経由でデータストアへの書き込みが、...することができます:
PCollection<Entity> entityCollection = p.apply(
DatastoreIO.v1().read().withNamespace("test_ns_df")
.withProjectId("someProjectId")
.withQuery(query));
EDIT: GitHubDataflowExampleからの依存関係(親-POM)を使用している場合、私は再びjava.lang.NoClassDefFoundErrorの取得:番目を構築する際に、COM /グーグル/いるProtobuf/GeneratedMessageV3 をeクエリの値....
だから私は読んだことはありません...誰も同じような問題を経験し、これを解決する方法を見つけましたか?あるいは、値を違うものにする必要がありますか? DatastoreHelper.makeValueを使用しているときにも同じ例外が発生します...作業中のプロジェクトで参照されている依存関係は、大いに役立ちます!
私はこれが依存性/バージョンの問題だと思っていましたが、多分あなたの誰かがよく知っています。私はこの人のような問題を抱えている最初の人ですNoSuchMethodError in DatastoreWordCount exampleちょうど間違ったバージョンを引っ張った人ですが、私の最終的にはこれは成功には至りません。事前
助けてください。それでも読書がうまく行かなかった。 googleingから、依存関係は本当に混乱のような縫い目ですが、v1.9.0はプロダクション用に推奨されるバージョンなので、これはうまくいきます! – user2122552