Spark 1.6.1にアップグレードした後、updateStateByKey
をmapWithState
に置き換えるようにアプリケーションのリファクタリングを開始しました。spark mapWithState updated states出力
新しいAPIのパフォーマンス上の利点を利用するために、すべての状態をロードするstateSnapshots
に電話する必要はありません。私は更新された状態だけを必要とします。
mapWithState
APIはDStream
の[key, input, state, output]
を返します。各状態は、入力が取り込まれた後に部分的に更新された状態です。このDStream
(つまり、対応するすべての入力がインジェスト/マップされた後の状態)から最新の状態だけを抽出するにはどうすればよいですか?
私は、MapWithStateDStream
上map
(入力と出力をドロップする)とreduceByKey
を行う(私は更新関数の内部で設定)より新しいタイムスタンプを持つ状態を選択することが、私はそこではないという保証を持つことはできません同じタイムスタンプを持つ2つの部分的な状態。たとえカスタム、キー、パーティショナーを使用しています。
出力MapWithStateDStream
の最新の部分状態を確認するには、mapWithState
を使用しますか?
状態は常に更新されます。入力アクションごとに状態が更新されるため、常にSome(updatedState)を返します。これは、出力にすべての部分的な状態が含まれていることを意味します。関連するすべてのアクションが処理された後に出力します。私は、同じ鍵に対応する複数の行動があると述べるべきだったと思います。 'mapWithState'はすべての状態ではなく、すべてのアクションに対して呼び出されます。同じ状態に対して複数回呼び出すことができます。 – Sepph
@Seppehあなたのコードの[MCVE]を投稿できますか?特にSpark DAG。 'State [S] 'を更新する限り、同じキーに対して複数のアクションがあっても、' updateStateByKey'のように値を出力する必要はありません。 –