2016-06-21 6 views
0

Googleのデータフロードキュメントでは、カスタムオプションを簡単に作成してパイプラインファクトリに登録したり、パイプラインファクトリを使用したりすることができます。Googleのデータフローでカスタムパイプラインオプションを渡すときにnullポインタ例外を取得する

しかし、これを実行してカスタムオプションオブジェクトを初期化しようとすると、Googleクラウド上で実行される処理ロジックでそれらを呼び出すときにNULLポインタ例外が発生してしまいます。私は文脈の中でこれを渡す必要がありますか、それとも他の方法でそれを渡すことは可能ですか?

私はいくつかのオブジェクトを渡そうとしましたが、シリアル化エラーが発生しました。

ここでは、わかりやすくするためにシリアライズエラーがあります。 The serialization error

+0

NullPointerExceptionsについて詳しく知りたいのですか? PipelineOptionsの使用方法については、https://cloud.google.com/dataflow/pipelines/specifying-exec-params#creating-custom-optionsをご覧ください。これは、任意のDoFnのProcessContext内で自動的に使用可能になります。 –

+0

ベン、私は実際にPipelineOptionsを使用するためにそのドキュメントを使用しましたが、私はそれを雲の中で実行されている/呼び出されているメソッドに引数として渡すことができませんでした。以下のLukaszの説明は良い意味合いがあると思います。 –

答えて

1

PipelineOptionsは、ユーザーがDoFns、CombineFns、およびその他のユーザー定義可能関数内にPipelineOptionsを埋め込むことを防ぐために、Java直列化できないように設計されています。これにより、実行中にデータフローワーカーの資格情報など、パイプラインが構築された後に変更されたPipelineOptionsにユーザーがアクセスできるようになります。

あなたの場合、DoFnはaccess to PipelineOptionsを提供するコンテキストオブジェクトを公開します。例:

static class MyDoFn extends DoFn<String, String> { 
    @Override 
    public void processElement(ProcessContext c) { 
     MyCustomOptions options = c.getPipelineOptions().as(MyCustomOptions.class); 
     ... access my options ... 
    } 
} 
+0

Lukaszありがとうございます。これは、DoFnを呼び出す前にMyCustomOptionsオプションを初期化するとDoFnで初期化された変数nullが見つかったので、再度初期化する必要がある理由がこれで分かります。ありがとう、それは意味をなさない。 –

関連する問題