1
私は巨大なRDD(ソース)を持っており、BloomFilterのデータを作成する必要があるので、ユーザのデータへのその後の更新では真の "diffs"SparkとBloomFilterの共有
ブルームフィルタの実装のほとんどが(つまりかかわらず簡単に固定することができる)非直列化可能ですが、私は少し異なるワークフローをしたいように見える:
- プロセスのすべてのパーティションを、適切なブルームフィルタのインスタンスを作成しますそれぞれのパーティションに対して実行されます。それらのBloomFilterオブジェクトのそれぞれについて、どこかのバイナリファイルに書き込みます。実際にパーティション全体をどのように処理するかはわかりません -
mapPartition
関数がRDDで利用可能ですが、それはIteratorを返すことを期待しています。おそらく、渡されたイテレータを消費し、BloomFilterのインスタンスを作成し、どこかに書き込んで、リンクを作成ファイルのIterator.singleton[PathToFile]
として返しますか? - マスターノードで -
consume
その処理の結果(Fileへのパスのリスト)を読み込み、それらのファイルを読み取り、メモリ内のBloomFiltersを集約します。次に、レスポンスをバイナリファイルに書き込みます。
私は、正しい方法を知らない:渡された関数内から(それはHDFS、S3Nまたはローカルファイルすることができる)
- クラスタでサポートされているFSにファイルを作成します〜
mapPartitions
- 2番目のフェーズのファイルの内容を
consume
と読みます(ファイルへのパスがあるRDDがあり、それを読むにはSparkContext
を使用する必要があります)。
ありがとう!