1

SequenceFile 内に格納されている Hadoop Vector のキーと値のペアの HashMap を作成しています。効率化のために、適切なサイズで HashMap を初期化できるように、キーと値のペアの Vector の長さを知りたいと考えています。

私は Mahout を使用seqdumperしており、ダンプされた各 Vector の最後に Count を追加します。私はそのコードを調べましたが、単純な反復カウンター (行ごとcounter++) を使用していたため、探しているものではありません。

こちらもSequenceFile.MetaData有望そうなので調べてみました。しかし、デバッガーは、エントリが含まれていないことを示しています。

.size()SequenceFile 内の Hadoop Vector のメソッドのようなものをすばやく取得する他の方法はありますか?

編集:これは、私がマップに変えようとしているものの seqdumper の出力です。具体的には、各 Key-Value ペアは IntWritable / NamedVector ペアです。キー番号から URI 文字列へのマッピングを作成したいと考えています。seqdumperファイルの最後に追加されているように、合計で 46599 個のキーと値のペアがあります。

Input Path: luceneVectors
Key class: class org.apache.hadoop.io.IntWritable Value Class: class org.apache.mahout.math.VectorWritable
Key: 0: Value: http://data.artsholland.com/production/73adae07-78c6-4180-93a4-34802090b5f1:{22118:0.18376858424635545,20381:0.40144184831236357,53753:0.2605347739121081,51569:0.2578896608715637,21930:0.2277873354603338,63035:0.27765920678967304,36979:0.2709104089668357,68351:0.15788776111071648,19436:0.2988119565549418,17991:0.12435264873296237,10356:0.3276902508762499,3410:0.27239123806574506,62942:0.18961849195965186,32527:0.24827631823639457,69909:0.11723303910369048,19832:0.2138117449778048}
Key: 1: Value: http://data.artsholland.com/production/c9fcc92b-18bb-4bfb-af52-380707f8d0d7:{41167:0.07191351238480857,61391:0.07496730342220936,[...]
[...],19156:0.0687215948604245}
Count: 46599
4

1 に答える 1

1

確かに、私の答えが役立つことは確かですが、seqファイル内のキーの数を知る必要がある場合は、SequenceFileの代わりにMapFileを使用できます。indexIntervalがわかれば、キーファイルを読み取ることでキーの数を見積もることができます。indexIntervalを比較的大きく設定すると、小さなインデックスファイルを維持しながら、キーの数を見積もることができます。追加のボーナスとして、キーのサンプリングを取得します。これは、さらに最適化するのに役立ちます。

SequenceFilesのさまざまなバージョンの詳細については、http://www.cloudera.com/blog/2011/01/hadoop-io-sequence-map-set-array-bloommap-files/を参照してください。

于 2012-10-10T19:54:46.753 に答える