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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SPPnet详解

    SPPnet详解RCNN系列:RCNN,SPPNet,FastRCNN,FasterRCNN,R-FCN。作者是何凯明SPPNet出现的原因之前的网络,比如LeNet,AlexNet,ZF,VGG等,它们的输入都是固定大小的,为什么要固定大小呐?原因就在最后连接的全连接层上。全连接层的输入一定是固定大小的。这一点很容易理解,因为全连接层网络就是传统的神经网络,传统的神经网络的输入层必定是固定大小的。而卷积神经网络的conv层的输入并不需要固定大小,那么conv层不用固定大小,FC层的输入又要固定大小,那么在这两

    2022年6月8日
    47
  • Kali如何使用Reaver破解Wi-Fi网络的WPA/WPA2密码

    Kali如何使用Reaver破解Wi-Fi网络的WPA/WPA2密码   首先,我们需要在虚拟机VMware中安装kali系统,关于如何安装kali系统,我的博客里也有介绍;然后要准备一个USB无线网卡,我用的是小米随身wifi。   我们要先了解Reaver的原理:它利用了WiFi保护设置(WiFiProtectedSetup-下文中简称为WPS)的一个弱点,WPS是许多路由器上都有的一个功能,可以为用户提供简单的配置过程,它与设备中硬编…

    2022年6月2日
    137
  • shell编程中if语句_linux shell if语句

    shell编程中if语句_linux shell if语句read-n1-p”Let’sgo(yorn):”if[“$REPLY”x=”y”x-o”$REPLY”x=”Y”x];then#dosomethingfi①、注意空格。eg. if   [  $REPLY  =  “Y”  ]示例中为了看的明显,输入了连续的空格,写shell脚本时,只需一个空格即可

    2022年8月18日
    7
  • 深入Java内存模型之阅读理解(2)「建议收藏」

    深入Java内存模型之阅读理解(2)

    2022年3月12日
    34
  • Redis锁的介绍「建议收藏」

    Redis锁的介绍「建议收藏」Redis锁的实现:由于Redis是单进程的,可以简单用setnx这个命令进行加锁操作,谁能操作成功,谁就可以获得锁。简单的代码如下:defacquire_lock():   #identifier:唯一标识客户端   #lockname锁名字   #redis客户端连接   ifredis.setnx(lockname,identifier):     …

    2022年6月16日
    32
  • java与数据库连接的步骤_java与数据库的连接怎么实现

    java与数据库连接的步骤_java与数据库的连接怎么实现1.加载驱动Class.forname(数据库驱动名);2.建立数据库连接使用DriverManager类的getConnection()静态方法来获取数据库连接对象,其语法格式如下所示:Connectionconn=DriverManager.getConnection(Stringurl,Stringuser,Stringpass);其中url–数据库连接字符串….

    2025年12月8日
    5

发表回复

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

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