20

履歴データをRDDセットに移動するSparkフレームワークを開発しています。

基本的に、RDD は不変で、操作を行う読み取り専用のデータセットです。それに基づいて、履歴データを RDD に移動し、そのような RDD でフィルタリング/マッピングなどの計算を行います。

現在、RDD 内のデータのサブセットが更新され、値を再計算する必要があるユース ケースがあります。

HistoricalData は RDD の形式です。リクエスト スコープに基づいて別の RDD を作成し、その RDD の参照をScopeCollectionに保存します。

これまでのところ、以下のアプローチを考えることができました-

アプローチ 1: 変更をブロードキャストします。

  1. 変更リクエストごとに、サーバーはスコープ固有の RDD をフェッチし、ジョブを生成します
  2. ジョブで、その RDD にマップ フェーズを適用します -

    2.a。RDD の各ノードに対して、ブロードキャストでルックアップを実行し、現在更新されている新しい値を作成して、新しい RDD を作成し
    ます。次に、step2.a で、この新しい RDD に対してすべての計算を再度実行します。乗算、削減など
    2.c. この RDD 参照を ScopeCollection に保存します

アプローチ 2: 更新用の RDD を作成する

  1. 変更リクエストごとに、サーバーはスコープ固有の RDD をフェッチし、ジョブを生成します
  2. 各RDDで、変更のある新しいRDDと結合します
  3. ステップ 2 で、この新しい RDD で乗算、リダクションなどのすべての計算を再度実行します。

アプローチ 3:

同じRDDを更新し続けて再計算するストリーミングRDDを作成することを考えていました。しかし、私が理解している限りでは、Flume または Kafka からストリームを受け取ることができます。私の場合、値はユーザーの操作に基づいてアプリケーション自体で生成されます。したがって、私のコンテキストでは、ストリーミング RDD の統合ポイントが見当たりません。

どのアプローチが優れているか、またはこのシナリオに適した他のアプローチに関する提案。

ティア!

4

2 に答える 2