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方法实现;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea激活码永久3月最新在线激活

    idea激活码永久3月最新在线激活,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
  • linux查看nfs端口命令,LinuxNFS端口命令是什么? 爱问知识人

    linux查看nfs端口命令,LinuxNFS端口命令是什么? 爱问知识人在Linux系统中,我们也会常遇到NFS的设置。针对这方面,我们这次主要讲解一下LinuxNFS的端口配置。看看如何设置可以调节好防火墙和端口的设置。#LinuxNFS服务固定端口及防火墙配置#1。在LINUX上正常安装NFS服务2。修改/etc/service,添加以下内容(端口号必须在1024以下,且未被占用)#Localservicesmountd1011/tcp#rpc。mount…

    2022年6月27日
  • (轉貼) 曾說退出政壇 謝長廷:是幽默啦!(News)

    (轉貼) 曾說退出政壇 謝長廷:是幽默啦!(News)(轉貼) 曾說退出政壇 謝長廷:是幽默啦!(News)

    2022年4月21日
  • JS字符串补全方法padStart()和padEnd()简介

    JS字符串补全方法padStart()和padEnd()简介一、关于字符串补全在JS中,字符串补全是常用操作,用的比较多的就是时间或者日期前面的补0。例如,日期,我们多采用4-2-2的表示形式,例如:2018-07-23当我们使用时间戳进行月份获取的时候,是没有前面的0的,例如:varmonth=newDate().getMonth()+1;//结果是7此时,就需要进行补全,通常做法是这样:if(month<10){month=’0’+month;}甚至会专门定义一

    2022年9月9日
  • PyCharm 2022.01.13 永久激活码(JetBrains全家桶)

    (PyCharm 2022.01.13 永久激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年4月1日
  • 使用GTalk服务

    使用GTalk服务Normal07.8磅02falsefalsefalseEN-USZH-CNX-NONEMicrosoftInternetExplorer4在你访问GTalk服务之前,你需要

    2022年7月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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