00:00
好,下面呢,我们案例实操一下啊,这个根据我们的分析,把这个代码呢,进行一个实现,首先呢,是制定一个类继承这个file的。这个类呢叫文件。所有的文件。来,到这里面借个包。店铺的好吧。啊,在这里面建一个类。继承谁呀?Input啊,这个包错了啊,那它里的是什么什么。K是不是这个文件的这个路径加名称啊啊。那表示形式是不是就是test?就使劲的,那它的Y6Y流你们可能不太知道。是这里面存的是整个一个文件是吧。
01:00
存文件用。啊子直接流。是字节流啊,Best包啊。拜啊,加个S啊,这样注意。好,那你这一继承之后,他就要求你重写他这的一个方法来。那这是什么方法呢?创建一个读取文件。The。那你记住哎,需要啥你就来啥就行了。就这么简单,那需要一个他,你就给他一个他呗。拿去。O。谢谢他。没看。又一个。有没有这么写过代码?需要他吗?对吧,需要他你就给他一个,他就完了呗。
02:00
那同学这你这还报错呢,哎,报错没关系啊,没关系啊。这个点到这,这里面有一个创建class啊,创建class对吧,来。这里报价非得?搞定之后,他是不是得按照人家这个规则去去搞啊。那这个是。记者。Record。CRD。那他这个的value是什么类型,是不是根据你这个外面定义的这个value有关系啊对你这个是test和。那这边就是test和。搞定,搞定之后他在里面要求你重写它相应的方法。一堆方法啊,再一看数据了,哎,不用新鲜的,一保存是这事就结了。啊,接下结了之后,一会儿我们一个一个来说他,那你看这边有没有搞错。
03:00
不报错了,哎,不报错了,不报错了之后来回过头来来看,首先映入你眼帘眼帘的是什么呢?Life。一般是什么意思?初始化呀,哎,初始化,那也就是说你这里面要进进行一些业务的处理,首先它传进来。两个核心的参数啊。那这两个核心参数你得拿到,那拿到怎么拿呢。Record reader。第二。你是不是得初始化调用一下。调一下,你看将谁传进去了,切片和三下环数都传过去了。那你都传到这个类当中了,这边是不是就接收到了切片和三小文啊。那剩下的这些逻辑代码就。那初始化的时候呢,我们需要获取一下这个切片。那这个节点我们用什么呢?用一个。
04:02
有的同学说,你这不是铺的吗?因为我们知道我们读的是什么文件。读的是不是就是这个。是不是就是文件呢?ABC是不是三个小文件呢?我是处理的是不,我们知道处理的就是文件了,哎,所以说这块呢,可以进行一个改变,那他之后。这点。为什么要这么说?否则的话会干什么?是不是他俩名字一样的?啊,那这地方要求你对它进行一个强转,完了将input变成fair。这个不会报类转换异常,因为呢,我们读的数据呢,就是用file格式的啊。OK,那下一个呢,是这个上下文,通过这个上下文我们能获取什么呢。Get。获取它的配置信息,后面呢,我们会要用到它,这时候呢,这呢提前获取了啊配置信息。
05:06
拿出去。这呢,相当于准备待用。那是这个方法,那下面再往下看,下面呢,有一个叫nice的P8,那这个呢,我告诉你它是核心的业务逻辑,那我们一会再写。玻璃的地方那先放着不管,那你再往下看,这呢叫get current key。获取当前的key啊。那当前的P是不是就是?对吧,他不是输入的这个P,输入的这个value吗。可能你需要一个K,你就创建一个K就完了。需要啥来啥?又一个。需要有T,给他个T。那就往事。你就完了。出去。稍微理解一下啊,需要一个key,因为最终我们要把这个在这个方法里面封装什么呢?哎,把数据封装到这个test里面和。
06:11
那具体的这个T呢,封装呢,就是这个文件的路径加名称,那它呢,就是具体的内容。就是在这里面去实现这个事情。宝贝,内容往这里放。好,那这个是这一块。那再往下,下一个呢,叫。Get current value。获取输出的value。是不是就是这个。一样,需要啥就来啥啊。你要一个吧。那把这个V呢,依然给它返回去。你看到了,现在我返过去正常都是空对象,一会儿呢,我就会对它进行一个赋值封装。
07:03
不用着急,所以说呢,这个get current key get current value也搞定了。那再往下呢,是叫get progress,其实呢,就是获取你这个正在处理的这个进程啊,进度进度条嘛,相当于一个进度条。说这总总长度,诶王先生,王先生走了多少。那这个呢,我们先不处理啊,不做不做这个。那OK,那再往下呢,是close关闭资源。啊,关闭资源呢,我们也不在这关啊。在这,因为我后面可以调用其他方法来观察,那你说后面这两个我们再不考虑,前面呢这个呢,一个是get key,一个是get value,我们已经搞定了。下面这个是初始化,那最终剩下的就是。在这里面进行对它的P和Y轴进行封装。那封装的时候第一步,第一步干什么呢?获取FS类型。
08:02
我要获取文件系统对象。获取到它之后,我就可以读取切片里面的信息,读取A文件。点T b.T。c.TT。因为文件系统我有,我可以获到获取到FS文件系统,然后通过流的方式,通过I流的方式,把这里的整个一个文件内容都给它封装到Y流,也就是字节数组里面去。败在。那它的文件的名称,那我就给它封装到K里面。都是在这里面去实现的。怎么实现呢?首先要获取这个对象,这个很巧妙啊,你。没有敲过的话,你上来来写肯定会有一定的困难,那我带你来写啊,首先拿到这个切片信息。切片都有它相应的路径吧,这也没问题吧,哎,获取这个切片的路径,你说获取它存在了呢。
09:03
他就怕。拿到了,拿到这个pass之后点点什么呢?Get fair。之前呢,我们是通过file,我能获取这个切片的路径,那现在呢,我们反推有了这个切片的路径,就能拿到这个切片的文件系统。这是系统给你提供的一篇啊好,那这个就是我们提前准备的。好,NUMBER1。回来F。这样就巧妙的将这个FS文件系统拿到。有了它之后,剩下的事儿就简单多了,就是一些IO的操作。那第二步获取输入流。那石流是谁呢?输入零,是不是就是你这里面存放的一个a.t.T这些文件呢?
10:00
那这里面呢,其实是FS可以去读这个文件。啊,因为他是这个是系统的一个机电嘛。它可以读,怎么读呢?FS.open。Open谁呢?就open你这个切片的路径,其实就是这个文件的路径。那就能返回一个。那真枢纽?Open。你想没想,我读完这个输入流,我最终要把这个输入流写到哪里去?这个最终这个数零,我是不是要写到。Y6面Y60里面去啊。是吧,字节呢,肯定要写到这里面去。那下面。那正常应该是不是创建输出流了。苏列输流之前。我们直接拷贝。这些拷贝,那拷贝到哪里呢?先给它拷贝到一个缓存文件里面去。
11:03
为什么这样呢?因为他有API的限制啊I。下面这个。还有。Read。么读取所有的信息。read里面有这么几个参数,第一个参数叫因不等。第二台数呢,是buff。一是把这个内容存到这个buff里面去,读到这里。那读多少呢?从哪开始读呢?哎,这个呢是表示从哪开始读,从。那读多少呢?如你这个文件的输入流的长度。那最终所有的数据就读到了这个。就是read。出来f is,那需要一个buff,那就来一个buff呗。在上面。
12:03
等于。另一个。那么下面我们起来了,这个八分的长度。我这里面一次读的是一个。一个文件呢。哎,你是读的一个文件,那么谁的长度呢。如果能问你这长度呢。可以通过界面点get。我这个A这个文件是不是就是一个切片呢。来,通过这个切片,我甚至拿到这个文件的长度。之前我们是不是掉过这边啊。类似的,获取一个文件的这个长度,获取一个文件的权限,获取一个文件呢。啊,还有什么名称是等等这些信息啊,哎。查看文件详情就是通过这种方式。然后它拿到它之后,它依然报错,原因什么呢。你返回的是一个。看一下啊是浪类型,那他需要的是一个。
13:04
那是不是强转一下就完事了?哎,那这样的这个八分的长度就等于你这个切片的。是不是一次把这个芯片全都做了?那么从哪开始读呢?不应该读,读多少呢。是不是还是那个刚才这个切片的长度啊,只不过呢,你可以用八方点。是不一样啊。他们两个值,它和它的值是一样啊,一模一样。那这样呢,就把这个文件的内容读到了这个八分缓冲区里面去。那我们最终的目的是将八分里面的内容,哎,写入到这个V里面对吧。那V往V里面写就容易多了。第四个封装。V。那就是v.S。凤凰城这个。
14:00
自己输出。啊,原因就是你看第一个参数就是这些数啊。就卡,然后后面这个呢。哪二读对吧,哎,读多长。这样呢,就将这个缓冲群体的数据读到了最终的V里面去。他在从零开始。是。Buff。这样这个V就。啊,就这么玩的啊,我们的目的呢,就是将切面里的信息,哎,把它最终要读到这个Y里面去。我在读的过程当中呢,我们把这个输入流先读到了这个缓冲区里面。然后呢,再将这个用V的赛方法将完成句体的内容设置。就实现了这个流的一个装备。OK,这是V,那么是不是还有一个K啊。还有的哈。
15:03
那这个K是什么呢?是不是这个路径和名称啊。简单了V点。那这个路径就是。就pass呗。第二。不使劲。是变成十字类型啊,这样就设置你了。那有同学说你这个只有路径,没有文件名称啊。一会儿我们打印出来就知道了啊,它其实是。既有路径又有这个路径后面的文件的名称啊,都有啊呃,致使呢,这个key和value我们就重装完了。装的啊,通过这个IO流的方式。那下面呢,关闭资源。关闭IO点。说谁呢?FS。打不掉。
16:00
这个FS。那这样呢,就写完了啊。那写完之后呢,这个nice k value,你们知道不知道它什么时候掉的。找到他。找到它之后,这个麦克的源码我带大家看过对吧。往下看看到哪儿呢,这里。contexttest.nky,那这个地方循环便利的时候,其实就是在读数据之前呢,我们读的时候是是怎么读的呢?它一次读取一行,读取到这一行之后执行麦克方法,然后再去读取一行,再去读取读取。哎,你是度一行,就是因为通过这个NEKY率里面有值,那有值的前提是不是你Y是不是得返回错误才认为有值。
17:01
是这意思吧,按你返回之后才能进入到这个麦克光码,那我就问你。那你这地方怎么写?你这地方是写回处还是放?那你放你这个读完之后考回放你这个还会进到麦克方法里面去吗。还会处理这个内容吗?不能对吧,那那你要写数呢。一直读一直在读对吧,那到底是true还是false呢。晕了是吧,啊晕了,那怎么办呢?加个标记位加。他。Is。一般的像这个意子啊啊这种的都属于这个布尔类型啊。是正在读表示数。那就是那这地方写if is progress,如果说它等于true。
18:05
我就让他读。第一次马上就开头。读完之后,这个是不是就表示有啊,哎,有的话我就在做。那么如果说这是读完之后,那是不是读完了这一行表示是不是结束了,结束之后你要亲一下这标记位变成。然后那你这地方其他情况下你是不是得返回bos。你只要这地方没有走,那你正常就相当于没有读到数据,就得放。那这个哈,这个类对象它什么时候掉一次呢。它是对你一个A文件也是一个界面执行一次T。b.T。那么就是说a.TT的时候,它要用一个后report。那掉完一次之后呢,什么呢?默认进来它是数数。
19:02
到这儿。变成false,然后返回处执行完,执行完那这个文件就读没了,那下面如果说他在读b.T的时候。相当于你这个类啊,后点又创建了一个对象,那这样才能保证你这个is是恢复为。做哎,这个要要要区分开哈,是这个原因,他得是每次他这上只要创建一个新对象,那这个就相当于是新的数据了。那现在数据就要读,读完之后呢,读到了之后,那你就返回错误,然后把它是标记置为P。所以说这里面你至少要经经历三次循环,A次,B次,C次。啊,最后一次呢,读的时候呢,正好没读到。这个啊,要清楚。那完事他完事之后,剩下的事就简单多了哈,下面呢,我们开始写他一下他的麦。
20:04
这个呢是相对来说比较难的地方。故作镇定啊。听到。嗯,好,那这个继承。那么这里的key和value是什么类型?哎,我现在是变成了这个,我后来要后面我要用的是不是这个后一步怎办呢?那它的输入类型就是。买test和best。在你再回想起,回想一下你默认的test的一部分,那它的这地方应该是什么类型的?和哎,对,就这原因哈。
21:05
拿到这边。好搞定,那他最终输出的类型依然是。啊。搞定。完蛋之后去,呃,重写它的麦克风法。OK。那在这里面干什么事呢?直接就把这个文件输出就完了。汇合是谁,谁来汇汇总啊,在端汇总啊,哎在这边我就是将你这个a.T读完之后,哎,然后往出一翻啊b.TD来了之后往端一发啊C点。都读完哈,都读完,写网的是环形缓冲区。同学说网页缓冲区方案之后统一有reduce,将这三个文件独手进行一个。那这块呢,这是。就是那下面就是。
22:02
就是。没有任何的写法啊,感觉。是不体现不出你的价值啊。好,那下面呢,我们再来啊,再来往下。继承。那他的K是。他也吃,我也吃。That。That's right。那他最终输出。依然是best best。OK。那么重写它的的方法。这个呢,是。这个呢是Y流失。文。
23:00
好搞定,那搞定之后呢,最终传过来的就是这个a.T。呃,b.T c.T然后以及它后面跟的相应的文件的内容。是不循环往出写呀,哎循往出写,那这一块循环往出写。文写出发,一起。这是相当于是一个一个的。文件内容呢,Contest?点right。那P是不是就传了来P啊。那Y数据它呀。对吧,这个key是文件的名称啊,Value呢,是文件的内容,是不是得循环写出啊。啊的循环写出,写到一个文件里面去。好,那这个呢,就搞定,搞定之后呢,我们写一下它的驱动啊。
24:01
这个合并尽快写都行啊。没方法。那在这里面呢,继续啊将这个。首先一定要一行一行看啊,尤其是这个咱们来代码一定要认真认真看这一个配置文件没问题。Job信息第一个I6没问题。再往下这三个类没啥说的啊,就是关联跟你写的啊这个。名字晚上那再往下呢,是后一步的慢啊,这个呢我们不说。
25:01
往下走,这个呢是输入的类型是test,这是。输入输出路径长的啊。这呢,依然是长的。Bus。啊,黄一场。考大事了。好,那这个呢,就是正常我们传统的这个驱动类啊,就写完了,写完之后呢,这里面只不过你要需要设置一下什么呢,因为你自定义了这个后,你。那你这个照里面必须按照他这个类型去设置,不设置的话,那你你写它有啥用啊对吧。还顺手把它打开。要设置它。设置它完了,最终输出的时候呢,我们是将这个文件输出到sequence file里面去。啊,那它的输出类型呢,就得改变成。否则的话,它输出不了这种格式,因为默认的是test。所以说这个也给他打开。
26:01
大包。导包呢,依然倒了一个长的啊,OK。那这样呢就搞定了,那下面呢,我们来一起看一下效果啊,Input在这里面找一下。100。在这儿,然后是input的。我们三个文件。一个是万。一个是。这个三文件,那下面呢,我们来运行一下。You ready existed。这样呢,运行完毕,运行完毕之后,哎,我们来查看一下结果二的步骤一在这右键。打开。
27:00
看到没,这是是二进制格式啊啊,你这个正常打开的话,如果你点着试的话,会丢失一些字符哈,呃否否则话我们来看一看,看看是否是跟我们说的差不多啊前面呢这些呢什么test,你看是不是我。我们的是太子吧?这个Y流是不是宝宝,那你再往看。他首先处理的是第一个文件,叫one test one test里面呢,有这么多名人啊,风云人物。就是第二期的,老天啊,现在混的都不错。像这个永鹏现在操作的数据量都是每天2亿条。还有那个伟东啊伟南啊,南哥前两天回来分享了,看能看到他相应的视频啊。跟你那个一样。像他是他班学的应该是最差的。
28:00
但是他是最努力的一个,每天他都是干到两三点。啊,每天如一日,包括最后的时候都是,呃,他是。应该他们班最后一个找到的啊,确实最后一个找到的,但是最后找了一个18的。而且现在干的超级好啊,超级溜啊。跟老板这个关系啊,挺好的啊。技术呢提升也特别快,所以说这个呢,就是努力和付出是成正比的,你要不努力一点办法都没有啊,当时他给我气的都气成什么样。敲代码就写的啥他都不知道。啊,就这样,但是最后的时候就是天天坚持坚持,坚持到最后天天不会那就问,不会就问,这也没问题啊。可以24小时对吧。啊,都可以解决,所以你要不努力,那就没有任何办法。行,那这个呢,是这几个,那下面呢是这个瑞这个文件啊,也是风人人物吧。呃,帅哥啊,这个也很厉害的,还有一个是藏膜,还有一个增强,这个增强特别厉害。
29:00
啊,来之前。跟媳妇分手了啊,然后呢,半路回去了,讲完还痛吧,连SPA都没学。去上海就找了一个16的。而且他还是一个专科生。找了一个16的。现在呢,是买了一个车,换没换媳妇不知道。又跟媳妇又又又那什么了嘛,来之前分手了,来之后。复合了啊,结婚了。特别特别奇葩啊,他们班的分分合合好多,对啊,是啊。地气不好。呃,这个呢,是第二个文件第二版里面,我看有谁啊啊有凡凡,这是大神。上班面霸啊面顺丰过。现垂直科技过面新浪过啊。面这个搜狐过面一个过一个。啊,他几乎每班都会过来分享啊。最终的垂直各地。呃,还有啊,这个龙龙是去的京东。呃,像什么马总啊,这个凯伦啊,这这都是在二手车啊。
30:04
后面不说了啊,前一阵子都约过来,这次都约过来了啊,吃个饭。都很好。防范啊等等,所以说呢,这是三个文件,你能感到啊,这个文件名称后面跟的就是相应的内容啊,这都是你们的榜样,都是大神啊。
我来说两句