2016-06-13 8 views
0

私はいくつかのorderストリームを処理するためにスパークストリーミングを使用しようとしていますが、のorderのストリームに以前の計算フィーチャーがあります。スパークストリーミングは事前に計算されたフィーチャーを得る

スパークストリーミングの実行中にこれらの機能を取得する必要があります。

今、私はハイブテーブルにbuyer_id機能を保存し、事前に計算機能を取得するためにRDD

val buyerfeatures = loadBuyerFeatures() orderstream.transform(rdd => rdd.leftOuterJoin(buyerfeatures))

とにロードします。

これに対処する別の方法は、機能をhbaseテーブルに保存することです。すべてbuyer_idに乗ってください。

どれが良いですか?あるいは私は別の方法でこれを解決することができます。私の短い経験から

答えて

0

  • あなたはDSTREAM操作の内側にロードされている場合は、この操作は、各バッチで繰り返されます。計算に必要なデータをロード
    は、ストリーミングコンテキストを開始する前に行うべきですInteverval時間。
  • ハイブから毎回ロードする場合は、データ転送中の間接費と考えられる問題を真剣に検討する必要があります。

データが既に計算されていて十分に小さい場合は、ブロードキャスト変数のプログラムの先頭にロードするか、さらには最終変数にロードします。これを行うか、RDD を作成してからのDStreamを作成し、これをキャッシュすることを忘れないようにしてください(現在は十分なスペースがある場合)。

ストリーミング時に実際にストリームを読む必要がある場合(多分ストリームからクエリキーを受け取った場合)、foreachPartitionで1回試してから、ローカル変数に保存してください。

+0

ここでは、事前に計算されたデータをロードしてキャッシュし、DStreamで結合操作を実行します。 – tintin

+0

はい、非常に良いです。 もし私が提案しているのであれば、RDDにロードしてforeachRDDでJoin操作をエンベロープします.DstreamはbathcTimeIntervalごとに更新されるため、あなたのケースでは使用できません。 – Vale

関連する問題