2016-07-21 12 views
1

こんにちは私は、Sparkが外出先の検出にStreamingKMeansを適用するためにKafkaからの着信データの処理を大量に行うことができる展開を計画しています。mapWithStateを使用して複数のKMeansをストリーミングする

しかし、Kafkaトピックからのデータはさまざまなソースから届くため、異なるKMeansモデル(州)を必要とするさまざまなデータ構造が定義されています。したがって、着信離散RDDの各エントリは、「キー」フィールド(基本的には単一のイベント処理が必要)に基づいて、独自のKMeansモデルを通過する必要があります。

Sparkでこのような処理を行うことはできますか?はいの場合は、最後にSparkの並列処理を利用していますか?私はSparkとScalaのかなり初心者で、何かが欠けているように感じます。

ありがとうございます。

UPDATE:

私は現在、この問題を解決するようだmapWithStateオペレータに探しています。質問は:私は直接StreamingKmeansモデルを状態に保存できますか?さもなければ、私は重心を保存し、高価に見える状態更新機能で新しいモデルをインスタンス化する必要があります。

答えて

1

このタイプの処理をSparkで行うことはできますか?はいの場合は、最後にSparkの並列処理を利用していますか?

理論的には、このタイプの処理は可能であり、分散処理の恩恵を受けることはできますが、使用するツールでは間違いありません。

StreamingKMeansは、RDDで動作するように設計されたモデルで、Sparkは入れ子になった変換をサポートしていないため、ステートフルな変換では使用できません。

キーのセットのカーディナリティが低く、すべての値が前に分かっている場合は、キーでsplit RDDsとすることができ、キーごとに別々のモデルを保持できます。

StreamingKMeansを第三者ローカルおよびシリアライズ可能なK平均モデルに置き換えて、mapWithStateまたはupdateStateByKeyと組み合わせて使用​​することができます。一般に、全体的な並列性を低下させることなく、分散バージョンを使用するよりもはるかに効率的でなければなりません。

+0

ありがとうございます。一般的に、このアプリケーションレイヤではデータが元のソースに依存するため、キーは予測できず、実行時に別のアプリケーションレイヤによってKafkaソースが追加されます。 3番目のパーティーオプション(何か?)やFlinkへの移行のアドバイスはありますか? Flinkは私の意見ではこのケースにもっと適しているようです... – Peterdeka

+1

ああ、多分私はあなたがスパークと友人を使用していないことを意味していた第三者の事で誤解されていますか?それは私の最初の選択でした...:D – Peterdeka

+0

私はここに偏っています。私はFlinkを試してみました。私はAPIの設計が嫌いでした。それを無視して、AFAIKはこの特定のシナリオに対処できる方法を提供していません。私は間違っている可能性があります。ローカルのlibsについて - Elkiは一般的にまともですが、ドキュメントは素晴らしいものではありません。 – zero323

関連する問題