我正在创建一个存储在SequenceFile中的Hadoop Vector的键值对的HashMap。为了提高效率,我想知道键值对的Vector有多长,以便我可以用适当的大小初始化HashMap。
我使用了Mahout的seqdumper
,它在每个转储的Vector的末尾添加了一个Count。我查看了它的代码,但它使用了一个简单的迭代计数器(对于每一行counter++
),因此不是我正在寻找的。 p>
同样SequenceFile.MetaData
看起来很有希望,所以我调查了一下。但调试器显示它不包含任何条目。
还有其他方法可以在SequenceFile中快速获取类似Hadoop Vector的.size()
方法吗?
编辑:以下是我正在变成Map的seqdumper的输出。具体而言,每个键值对是IntWritable / NamedVector对。我希望创建一个从密钥号到URI字符串的映射。共有46599个键值对,在文件末尾附加seqdumper
。
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
答案 0 :(得分:1)
不确定,我的回答是有用的,但是如果你需要知道seq文件中有多少个键,你可以使用MapFile而不是SequenceFile。 知道indexInterval,您可以通过读取密钥文件来估计密钥数。如果将indexInterval设置得比较大,则可以维护小索引文件并仍然可以估计密钥数。 作为额外奖励,您可以获得钥匙的样本,这可以帮助您进一步优化。
有关不同版本的SequenceFiles的更多详细信息,请访问http://www.cloudera.com/blog/2011/01/hadoop-io-sequence-map-set-array-bloommap-files/