2016-07-05 4 views
0

私はSparkとSpark-Cassandraコネクタを使ってCassandraから自分のデータを集めています。私はそれを単一の共有SparkContextとREST APIでWebアプリケーションを持っています。 CassandraテーブルをSparkメモリに長期保存するには?

  • フィルタリング(Sparkの変換のシーケンス)
  • フィルターAPI呼び出しパラメータのみ第三工程上記のアルゴリズムにおいて
  • に従ってRDDの調製のためにそれを準備

    1. 読むCassandraの表:処理は、次のフローを有しています呼び出しごとに異なります(apiリクエストパラメータに依存)。 APIリクエストはパラレルモード(リクエストごとのスレッド)で実行されます。テーブル内のデータはあまり動的ではなく、スパーク作業者にはテーブル全体を格納するのに十分なメモリがあるので、2番目のステップの後にRDDを永続させ、すべての要求にフィルタをかけるだけですでにRDDを保持します。また、このRDDを定期的に更新したいと思います。それを達成する最良の方法は何ですか?

    +0

    私は私はあなたが欲しいものを正しく理解していないです。 RDDは異なるコンテキスト間で共有する必要がありますか?そうしないと、簡単な['persist'](http://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence)がそのトリックを行うべきです。 –

    +0

    @Hawknightいいえ、私はただ一つの文脈しか持っていません。永続化されたテーブルをscalaオブジェクトの中に格納することはできますか? – Cortwave

    +0

    あなたのテーブルがRDDとして変換されている場合は、RDDを永続させ、後続の呼び出しで永続RDDへの参照を保持することができます(技術的には、アクションが呼び出された時点でのみ保持されます)。 –

    答えて

    1

    あなただけのRDDが計算され、最初のアクションが呼び出されたときにキャッシュされます手順2の後にRDDにpersistを呼び出すことができます。データを更新する必要がある場合は、unpersistに電話してください。これにより、Sparkは古いキャッシュを破棄し、その操作が実行されると新しいキャッシュを保存します。基本的に、あなたはこのようなことをします。

    var data = loadAndFilter() 
    while (!stop) { 
        data.persist() 
        // Do step 3 
    
        // Drop the old cache 
        data.unpersist(false) 
        // Load the fresh data 
        data = loadAndFilter() 
    } 
    
    関連する問題