FileInputFormat

FileInputFormat最顶级是InputFormat抽象类,该类定义了两个方法,方法getSplits是负责切分输入文件(们)的,把很多的输入文件(们)切分成很多的输入分片,切分规则就是在这里定义的,每个InputSpl

大家好,又见面了,我是你们的朋友全栈君。

最顶级是InputFormat抽象类 ,该类定义了两个方法,方法getSplits是负责切分输入文件(们)的,把很多的输入文件(们)切分成很多的输入分片,切分规则就是在这里定义的,每个InputSplit对应一个Mapper任务。方法createRecordReader是负责把getSplits生成的很多InputSplit解析成键值对的。InputFormat中的方法getSplits负责拆分输入文件的,方法createRecordReader负责把拆分的数据解析成键值对。这是从两个不同的角度设定的方法,职责不同,功能不同。方法getSplits的返回值是InputSplit的集合。抽象类InputSplit表示每个Mapper任务将要处理的数据,是二进制的,

根据要处理的数据类型不同,InputSplit也有不同的含义,因此会有很多子类。

方法createRecordReader的返回值是一个可以处理键值对的RecordReader。抽象类RecordReader是就是把InputSplit的数据解析成键值对的,提供了解析规则和读取键值对的方法,

根据数据不同,解析规则也会不同,因此会有很多子类。

根据解析的数据不同,InputFormat的子类有DBInputFormat、DelegatingInputFormat和FileInputFormat。其中,DBInputFormat是专门用于加载数据库中的数据的,如mysql、oracle等;FileInputFormat是专门用于处理文件中的数据的;DelegatingInputFormat是把其他各种InputFormat组成到一起的委托接口。从功能可以看出,FileInputFormat是用途最广的,其次是DBInputFormat,再次是DelegatingInputFormat。

FileInputFormat

该类是专门处理文件的,该类提供了如何计算输入分片(InputSplit)的方法。每个InputSplit对应一个运行的Mapper任务,因此InputSplit的数量决定了运行的Mapper任务数量,InputSplit的大小决定了每个Mapper任务处理数据量的大小。在这里,使用的是InputSplit的子类FileSplit。类FileSplit是专门用于处理输入文件的,会按照固定的字节数对每个输入文件进行拆分,拆分成很多的FileSplit。

根据文件的不同,对FileSplit解析成键值对的方式也有很多。因此,FileInputFormat会有很多的子类,包括TextInputFormat、KeyValueTextInputFormat、NLineInputFormat、CombineFileInputFormat和SequenceFileInputFormat。

输入格式化类的作用有两个:

  • 设定Mapper任务数量——通过getSplits方法实现;
  • 把输入文件的内容解析成键值对,供map函数调用——通过createRecordReader方法实现;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/155143.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • MINI PCI-E接口_pcie接口原理图

    MINI PCI-E接口_pcie接口原理图1、PCIe3.0X4下图只用了2Lanes,pcie接口分x1、x4、x8、x16接口,向下兼容。含一对差分CLK时钟信号上图:pciex4引脚定义2、minipcie和msata接口一样minipcie和msata接口定义是一样的,可以相互交换使用。都是只有1对Tx和1对Rx,没有差分CLK时钟信号。下图是msata接口,常用于系统盘。上图:msata盘上图:minipcie引脚定义上图:msata引脚定义…

  • Linux源码安装_linux源码包的安装

    Linux源码安装_linux源码包的安装最近想搞条形码和二维码,于是安装zbar,好生难搞。wgethttp://downloads.sourceforge.net/project/zbar/zbar/0.10/zbar-0.10.tar.gztar-zvxfzbar-0.10.tar.gzsudoapt-getinstallpython-gtk2-devsudoapt-getinstalll

    2022年10月30日
  • 相机标定(Camera calibration)原理、步骤

    相机标定(Camera calibration)原理、步骤      这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用。这属于笔记总结。1.为什么要相机标定?&nb

  • git使用步骤_小猪酸奶的使用步骤

    git使用步骤_小猪酸奶的使用步骤厉害了!小猪用Git一年多后的精华总结标签:Git描述性文字:不要问我为什么用这种骚猪风格的标题,现在写博文,标题不骚,人家都不乐意看~接触Git到现在有一年多了,对Git使用也是日渐精进,虽说不上很熟络,但也算入门,决定年前总结下,所以有了此文。Git博大精深,还有很多的东西需要学习,比如自己搭建啊,一些便利工具的使用啊,一些疑难杂症解决方案啊等等,当然这就是下一话的事了。本文讲述的

  • c语言优先级排序

    c语言优先级排序c语言运算优先级

  • js 修改全局变量

    js 修改全局变量一般在方法里对全局变量的修改仅限于方法体内,方法结束之后,全局变量就会恢复之前的值,在前端的js代码里,可以通过使用ajax来修改全局变量的值:其中async:false是把ajax从异步改为同步,这样就可以实现在方法里实现对全局变量的修改。<scripttype=”text/javascript”>varn=1;functionchangen(){$.ajax({async:false,

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号