Apache's Beam
SDK バージョンを使用0.2.0-incubating-SNAPSHOT
しており、ランナーを使用してデータをビッグテーブルにプルしようとしていますDataflow
。残念ながら、シンクとしてNullPointerException
使用しているデータフロー パイプラインを実行すると、エラーが発生します。BigTableIO.Write
すでにチェック済みBigtableOptions
で、必要に応じてパラメーターは問題ありません。
基本的に、私は作成し、パイプラインのある時点でPCollection<KV<ByteString, Iterable<Mutation>>>
、目的のビッグテーブルに書き込むステップがあります。
final BigtableOptions.Builder optionsBuilder =
new BigtableOptions.Builder().setProjectId(System.getProperty("PROJECT_ID"))
.setInstanceId(System.getProperty("BT_INSTANCE_ID"));
// do intermediary steps and create PCollection<KV<ByteString, Iterable<Mutation>>>
// to write to bigtable
// modifiedHits is a PCollection<KV<ByteString, Iterable<Mutation>>>
modifiedHits.apply("writting to big table", BigtableIO.write()
.withBigtableOptions(optionsBuilder).withTableId(System.getProperty("BT_TABLENAME")));
p.run();
パイプラインを実行すると、メソッドNullPointerException
で BigtableIO クラスを正確に指すが得られました。public void processElement(ProcessContext c)
(6e0ccd8407eed08b): java.lang.NullPointerException at org.apache.beam.sdk.io.gcp.bigtable.BigtableIO$Write$BigtableWriterFn.processElement(BigtableIO.java:532)
bigtable に書き込む前に、このメソッドがすべての要素を処理していることを確認しましたが、このパイプラインを実行すると、なぜそのような例外が発生するのかわかりません。以下のコードによると、このメソッドはbigtableWriter
属性を使用して各 を処理しますc.element()
が、ブレークポイントを設定してデバッグすることさえできませんnull
。この問題を解決するためのアドバイスや提案はありますか?
@ProcessElement
public void processElement(ProcessContext c) throws Exception {
checkForFailures();
Futures.addCallback(
bigtableWriter.writeRecord(c.element()), new WriteExceptionCallback(c.element()));
++recordsWritten;
}
ありがとう。