欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java mapfile_基于文件的数据结构:关于MapFile

发布时间:2023/12/1 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java mapfile_基于文件的数据结构:关于MapFile 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

MapFile是已经排过序的SequenceFile,它有索引,所以可以按键查找

1.MapFile的写操作

MapFile的写操作类似于SequenceFile的写操作。新建一个MapFile.Writer实例,然后调用append()方法顺序写入文件内容。如果不按顺序写入,就抛出一个IOException异常。键必须是WritableComparable类型的实例,值必须是Writable类型的实例。

写入MapFile,程序如下:

packagecom.lcy.hadoop.io;importjava.net.URI;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.io.IOUtils;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.MapFile;importorg.apache.hadoop.io.Text;public classMapFileWriteDemo {private static final String [] DATA={"One,two,buckle my shoe","Three,four,shut the door","Five,six,pick up sticks","Seven,eight,lay them straight","Nine,ten,a big fat hen"};public static void main(String[] args) throwsException {//TODO Auto-generated method stub

String uri=args[0];

Configuration conf=newConfiguration();

FileSystem fs=FileSystem.get(URI.create(uri),conf);

IntWritable key=newIntWritable();

Text value=newText();

MapFile.Writer writer=null;try{

writer=newMapFile.Writer(conf,fs,uri,key.getClass(),value.getClass());for(int i=0;i<1024;i++){

key.set(i+1);

value.set(DATA[i%DATA.length]);

writer.append(key, value);

}

}finally{

IOUtils.closeStream(writer);

}

}

}

运行程序,使用这个程序构建一个MapFile:

当我输入命令 hadoop fs -lsr numbers.map,可以看到:

发现numbers.map实际上是一个包含data和index这两个文件的文件夹,且这两个文件都是SequenceFile

data文件包含所有记录,如下:

index文件包含一部分键和data文件中键到其偏移量的映射:

从输出可以看出:默认情况下只有每隔128个键才有一个包含在index文件中,当然也可以调整,调用MapFile.Writer实例的setIndexInterval()方法来设置io.map.index.interval属性即可

2.MapFile的读操作

在MapFile依次遍历文件中所有条目的过程类似于SequenceFile中的过程:首先新建一个MapFile.Reader实例,然后调用next()方法,直到返回值为false

总结

以上是生活随笔为你收集整理的java mapfile_基于文件的数据结构:关于MapFile的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。