2017-08-02 9 views
0

クラウドPubsubトピックからクラウドデータストアに収集されたデータをストリームするために、データフローパイプラインを作成して展開しようとしています。しかし、私は次のようにエラーに陥っています。 シンボルシンボルが見つかりません:変数DatastoreIO場所:クラスDataUploadクラウドPubsubからDatastoreへのデータフローパイプライン

関連パッケージをインポートするために、以下のドキュメントを読み進めている間に間違っていることを理解していません - DatastoreV1次のサンプルコードの構文に従います。https://cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/io/datastore/DatastoreV1

私がこれらの数日間行ってきたことは、どんな助けでも大幅に軽減されます。事前に感謝!

import com.google.cloud.dataflow.sdk.Pipeline; 
import com.google.cloud.dataflow.sdk.io.PubsubIO; 
import com.google.cloud.dataflow.sdk.options.DataflowPipelineOptions; 
import com.google.cloud.dataflow.sdk.options.PipelineOptionsFactory; 
import com.google.cloud.dataflow.sdk.runners.DataflowPipelineRunner; 
import com.google.cloud.dataflow.sdk.transforms.DoFn; 
import com.google.cloud.dataflow.sdk.transforms.ParDo; 
import com.google.cloud.dataflow.sdk.values.PCollection; 
import com.google.cloud.dataflow.sdk.io.datastore.DatastoreV1; 

public class DataUpload{ 

    public static void main(String[] args) { 
     DataflowPipelineOptions options = PipelineOptionsFactory.create() 
       .as(DataflowPipelineOptions.class); 

     options.setRunner(DataflowPipelineRunner.class); 
     options.setProject(projectName); 
     //options.setStagingLocation("gs://my-staging-bucket/staging"); 
     options.setStreaming(true); 

     Pipeline p = Pipeline.create(options); 
     p.apply(PubsubIO.Read.topic("projects/{project_name}/topics/data")) 
      .apply(DatastoreIO.v1().write().withProjectId(projectId)); 

     p.run(); 
    } 
} 

更新:私は、以下の行を含めると、エラーの新しい束を持っています。

import com.google.cloud.dataflow.sdk.io.datastore.DatastoreIO; 
適用(com.google.cloud.dataflow.sdk.io.datastore.DatastoreV1.Write)について見出さ

DataUpload.java:[30,14】なし適切な方法 方法com.google.cloud.dataflow .sdk.values.PCollection.apply(com.google.cloud.dataflow.sdk.transforms.PTransforms.PTransform、OutputT>)は適用されません (型変数を推測することはできません)OutputT (引数が一致しません; com.google.cloud .dataflow.sdk.io.datastore.DatastoreV1.Writeはcom.google.cloud.dataflow.sdk.transforms.PTransform、OutputT>に変換できません) メソッドcom.google.cloud.dataflow.sdk.values.PCollection。 apply(java.lang.String、com.google.cloud.dataflow.sdk.transforms.PTransform、OutputT>)は適用されません。 (型変数を推測することはできません)OutputT (実際の引数リストと仮引数リストの長さが異なります)

答えて

2

次のimport文を追加してください。

import com.google.cloud.dataflow.sdk.io.DatastoreIO 

あなたはデータフロー2.0+を使用している場合は、このhere

を使用するためのいくつかの例とドキュメントを見つけることができ、その後、いくつかの異なるパッケージやメソッド名で、これらjava docsをご覧ください。

+0

お寄せいただきありがとうございます。当初はこのラインを使用しましたが、DatastoreV1が見つからないという別のエラーがありました。そこで、私は 'import com.google.cloud.dataflow.sdk.io.DatastoreIO' ' import com.google.cloud.dataflow.sdk.io.DatastoreV1' の両方を追加しました。そして、私はもう一つの一連のエラーを参照していますメソッドが呼び出されたこと、「apply(com.google.cloud.dataflow.sdk.io.datastore.DatastoreV1.Write)に対して適切なメソッドが見つかりません」など – jlyh

+1

あなたのPCollectionデータ型が一致しないことが問題だと思います。 PubSubIOはPCollectionを返し DatstoreIOはPCollectionを受け付けるhttps://cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/io/PubsubIO.Read https://cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/io/DatastoreIO PubSubIOの文字列を変換するには、途中にParDoを導入する必要があります値をDatastore Entityオブジェクト型に変換します。 https://cloud.google。 –

+1

また、この例をご覧ください。データストアにもデータセットを指定して、 に書き込む必要があります。 https://cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/io/DatastoreIO –

関連する問題