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相关推荐

  1. java程序员的大数据之路(7):基于文件的数据结构

    SequenceFile 介绍 由于日志文件中每一条日志记录是一行文本.如果想记录二进制类型,纯文本是不合适的.这种情况下,Hadoop的SequenceFile类非常合适.SequenceFile可 ...

  2. java中逻辑运气_一个基于运气的数据结构,你猜是啥?

    排行榜 懂行的老哥一看这个小标题,就知道我要以排行榜作为切入点,去讲 Redis 的 zset 了. 是的,经典面试题,请实现一个排行榜,大部分情况下就是在考验你知不知道 Redis 的 zset 结 ...

  3. 基于Java的NetCDF文件解析

    近期在做的项目中,需要使用Java语言进行NetCDF文件的解析. 然而,当在寻找资料时,发现基于Java语言的资料相较于Python少了很多,而且现有的基于Java解析NetCDF文件到CSV的资料 ...

  4. 基于java的excel_基于Java的Excel文件操作

    电脑知识与技术 本栏目责任编辑: 王力计算机教育 1 引言在 Web 应用日益盛行的今天, 通过 Web 来操作 Excel 文件的需求越来越强烈, 目前较为流行的操作是在 JSP 或 Servlet ...

  5. 【Java 编程】文件操作,文件内容的读写—数据流

    一.认识文件 1.什么是文件 平时说的文件一般都是指存储在硬盘上的普通文件 形如 txt, jpg, mp4, rar 等这些文件都可以认为是普通文件,它们都是在硬盘上存储的 在计算机中,文件可能是一 ...

  6. 一个基于运气的数据结构,你猜是啥?

    作者 | why技术  责编 | 张文 头图 | CSDN 下载自东方 IC 来源 | why技术(ID:hello_hi_why) 从排行榜切入 懂行的老哥一看这个小标题,就知道我要以排行榜作为切入 ...

  7. 一个基于运气的数据结构,发明它的人是火男?

    点击上方"五分钟学算法",选择"星标"公众号 重磅干货,第一时间送达 从排行榜切入 懂行的老哥一看这个小标题,就知道我要以排行榜作为切入点,去讲 Redis 的 ...

  8. java 读取流的字符编码格式_如何使用Java代码获取文件、文件流或字符串的编码方式...

    标签: 今天通过网络资源研究了一下如何使用Java代码获取文件.文件流或字符串的编码方式,现将代码与大家分享: package com.ghj.packageoftool; import info.m ...

  9. 时间序列数据库概览——基于文件(RRD)、K/V数据库(influxDB)、关系型数据库...

    一般人们谈论时间序列数据库的时候指代的就是这一类存储.按照底层技术不同可以划分为三类. 直接基于文件的简单存储:RRD Tool,Graphite Whisper.这类工具附属于监控告警工具,底层没有 ...

最新文章

  1. Kth Largest Element in an Array
  2. CodeForce 534C Polycarpus' Dice (数学推理)
  3. 深入理解:一文讲透RabbitMQ
  4. lamp mysql大小限制_LAMP 调优之:MySQL 服务器调优
  5. MySQL优化的一些基础
  6. mysql三高讲解(二)2.9: mysql示例数据库sakia database的使用
  7. iOS--React Native浏览器插件
  8. mysql pdo 安全_使用PDO查询Mysql来避免SQL注入风险
  9. 从 CCNA 到 CCIE
  10. 麦肯锡:数字化转型四步法!
  11. java 32位无符号整数_Java中32位无符号数的取法
  12. 【HUSTOJ】1055: 字符图形11-字母正三角
  13. IDEA切换分支 工作空间变化问题设置
  14. 怎么用计算机技术预测蛋白质结构,如何利用同源建模预测蛋白质三级结构
  15. Win10卸载预装软件最全教程
  16. win10 任务栏的工具栏 以及重启消失的解决方法
  17. iOS开发---本地通知(UILocalNotification)
  18. pytorch锁死在dataloader(训练时卡死)
  19. 0415学习笔记:3决策树
  20. 共创RPA发展生态,2019中国RPA应用与发展论坛在北京成功举办

热门文章

  1. java字符编码方式总结
  2. 轻松搭建一个Windows SVN服务器
  3. abap 创建出口历程_SAP abap 需找出口(BADI)的几种方法
  4. 丰田pcs可以关闭吗_丰田车必备的配置有哪些是在亚洲龙上体现了?
  5. db2 获取返回的游标_MySQL ------ 存储过程与游标简单使用
  6. 表单新增元素与属性(control、placehoulder、list、AutoComplete、pattern、SelectionDirection、indeterminate属性)
  7. linux安装程序过程,linux 应用程序安装过程
  8. [译文]过犹不及,别再在编程中高射炮打蚊子
  9. background-image使用svg如何改变颜色
  10. CSS3的过渡和转换