Sparkアプリケーションで、ワーカーコードで使用される変数を定期的に更新する必要があるという要件があります。Sparkワーカーで定期的にオブジェクトを更新するには?
より具体的に理解するために、私は等しい分割で私のデータをキネシスの断片にする必要があります。キネシスの破片の数が増加または減少するいずれかの時間を、ので、私のパーティションキーは
System.currentTimeMillis % shardSize
ですが、私はいつもこれを照会したいので、java.utilのような何かいけないので、私はいつも破片の正しい数を取得する必要がありますすることができます.TimerTaskが役立ちます。これは私が労働者にブロードキャストすることができます。
これは定期的に実行し、その値をスレーブにブロードキャストするために必要なコードです。
def fetchNumberOfShards(): Integer = {
val describeStreamRequest = new DescribeStreamRequest()
describeStreamRequest.setStreamName(streamName)
val describeStreamResult = kinesisClient.describeStream(describeStreamRequest)
val shards = describeStreamResult.getStreamDescription().getShards()
return shards.size()
}
私はそれを試しましたが、どういうわけかKinesisはパーティションキーを一様に配布しません。特に再払いが発生したとき。それはなぜこのコードです。 – cmbendre
ブロードキャスト変数を含めるように答えを更新しました。これにより解決されます – ImDarrenG