00:00
好,上节课我们的map和reducer已经写完了,那接下来呢,我们就开始制定一个out put format。来,那自定义out ma里面最核心的呢,就是创建两条流,一条流呢是用来未来写出到at特硅谷点,还有一条阿流写除到r.lo就干这么一件事就行了,那好,那我们来看一下这个步骤啊。右键有一个,那我们这里面是log。Output。For啊,Form,好。定义这么一类,然后呢,它需要继承的是file outp put for ma,选择长的对吧,然后这里面需要一个泛型,那它的泛型哪来的,是不是reduce输出的KV就到了这个out form,那拿过来数据到这。二加回车。实现这里面有一个方法叫record writer,比如这个方法是往出写的,你看它的返回值是你需要返回一个record write,记住它需要啥,你就给他一个啥就行了,我在前面写一个log。
01:11
你看,然后LRW啊,手写啊,然后一个。让他给拍。你需要啥,我就给你个啥。那有同学该说了,说海哥你这没有啊,对吧,你这没有这个log record啊没有没关系,创建没out加回车。创建创建哎跟没有对象创对象是一样的是吧?哎创建创建完之后你再回来,你发现这里面还报错对吧?啊海报说因为啊你反你拗了一个类,它是一个真正的recorder吗?不是你得需要继承recorder啊选长的啊选长的有长选长。那进来之后还是仍然需要给他一个泛型,那把他泛型拿过来。给过来,给过来之后alt加回车实现对吧?哎,实现它right方法,由这个方法真正的去往出写。
02:07
那我们需要创建两条流对吧?一个是爱的硅谷流,一个呢是阿的流,输出到不同的文件当中,哎,通过这地方进行控制就可以了呗,那回过来你看这地方还报错吗?这不就不报错了,哎,记住需要啥创建啥。那好,还有,那我这里创建了一个log record writer,跟我这个job有联系吗?现在。你思考一下,我就平白无故创建一个record writer,就能跟我当前这个任务连接在一起,不可能,那怎么样的连接在一起啊,你是不得把人家的这个配置传过去。我未来用你这个job里的相关信息进行留的一个处理,那不就产生关系了吗啊。Out,加回车有啥就创建啥来了,你看这回这边还包说吗?彻底不报错了吧,哎,那我们回来看一下。那在这里面要干什么事儿,对吧,我得准备创建两条流啊。
03:02
嗯,创建两条。那两条流。怎么创建,用谁上创建,哎,用这个file system还记得它吗?它是不是一个客户端呢?哎A这客户端第二。那这里面get conviction,那这个conviction我还能自己去new吗?思考一下,如果我还自己new了一个conction,那跟你这个job还有关系吗?没有,那如果想产生关系,我就用你照吧。设置好的这个confusion,那获取对吧?哎,这种方式获取到点二,那现在呢,就彻底的他们之间建立了联系,二加回车,那现在还能往上抛吗?你往上抛,那上一层代码是不是还得再抛啊啊或者是这个抓取,那现在呢,我就在底层直接把它抓取到就可以了哈,就不再往上抛了啊行,那下面开始创建流FS.create。
04:00
Great里面需要一个路径,创建一个pass。是吧,Pass里面那两条流,那两条流我输出到哪里呢。输出路径。输出到D盘。删掉这些。对吧,输出路径不能存在,那我就来一个诶。艾特硅谷点了,哎,往这里面去输出,好,这是第一条流。At硅谷,Out。那再来FS,点你一个pass。那下一条聊。那这呢叫OTH。Other love,哎,搞定。Diver。那这呢,是。嗯,O。
05:01
Out。对吧,哎,两条流就有了,那这两条流有了,我下面呢,真正的往出写是在这里面往出写对吧,哎往出写那好,那往出写的话呢,那我这个流现在是内部变量对吧?嗯,在在内部,在内部的话,你怎么怎么让它变成全局的。CL out加F。升级为全局的CTRL2加F升级上来,那你升级上来之后,这final不行啊,我未来得用它啊,得用它。好拿到之后,那下面这块呢,是具体的往出写。具体。写,那你具体写他进来是谁?Test key是不是就那一行行网址啊,对吧,你看是不是这一行行网址,那好,那你这是一行行网址进来,进来之后这个外流没有没有什么含义,对吧,没有什么含义,那我现在呢,怎么能判断说哪一个发往二的股股呢?
06:02
那我只需要判断这一行内容当中是否包含艾特硅谷不就行了吗?啊,简单了。呃,那它这里面是否包含股,那我得把它转换成使卷进行处理,是不是更容易一些,哎,它就叫log。拿到它之后,那if。log.contention包含。爱的硅谷。啊,包含艾特硅谷,我立即就用这个艾特硅谷这个流往出写。第二。Right,哎,Best把谁传进去?把这个log传进去,这不就行了吗?然后else,如果它这里面没有包含I硅谷,那我直接就用这个other的al点。将这个log传进去,你看就这么简单。那你这个是写出去之后,那流的操作往往要进行关流对吧?哎,最后呢,别忘了关流。
07:06
关啊流,那官流的话我们用谁呀?哎,这里面有一个工具类叫IO us。第二,Close STEM,把爱硅谷传进去。IO。S,第二,Close stream,将这个other out去。对吧,哎,这就OK了,那这个整个这个流程啊啊,我们来来回顾一下哈,其实呢,也是非常简单的来在这个位置。嗯,这儿首先呢,我们是需要定一个类继成file out,那这里面呢,重写它的这个get record write这个方法,那recordr你需要一个返回一个record writer往出写,那你就自己创建一个。哎,它没有没关系,先创建,创建之后,那你就得实这个继承它就行了吗?哎,好,那就来了,来到这,哎继承它,继承它的时候把这个KV1定要传进来哈,KV1定要传进来,传来之后呢,我们在这里面就干一件事,要创建两条流,对吧?来创建两条流,那创建流呢,我们得用这个file system来创建,那file system创建我们这个配置信息就不能再拗了,你得跟你这个job吧产生关联,对吧?哎,那你得用这个job吧,自带的这个配置信息,诶放在一起,放在一起之后两条有了,有了之后通过这个方法真正的去往出写,那往出写的时候就判断这行内容当中是否包含艾特硅谷,那包含就艾特,不往出写不包含用它对吧就行了。
08:29
那下一个呢,就是这个驱动啊,驱动的话我就不带大家去写了哈,因为咱已经写过很多遍了,呃。我建议大家如果写的变数特别多啊,你也没有必要去写了啊,因为驱动的这个太。格式太固定了,固定的这个八股文格式啊。直接把内容拿过来。然后呢,给大家解释一下。好,拿回来之后啊,这个里面倒一下包out加回车,哎,倒包的时候要注意啊。好回车。
09:00
这个没问题啊,然后test。没问题,Now read now read,没问题,输出,嗯,这呢是set out put form ma,哎,这回得换对不对?哎,因为我们自己制定了一个out啊,Love out put ma,那这用它了哈,那这也要注意,那下面fair input ma。倒下包。导包导长的啊,导长的OK,那这个new pass。OK,没问题了,那这个音input的这个路径不行啊,不行,那我们找一下啊,我们input的路径在哪呢。Input下面有一个input output方案,哎,这个路径啊,把它拿下。拿过来之后。转过来OK吧,那好,那下面这个还有一个output form,那同学说你海哥你这上面已经修改为log out put了,那你这为为什么还要设置一次呢?那你看上面这块哈,虽然我们自定义了out,但是我们的out put制继承的是来自于fire out put,而fair out输出呢,是需要一个下划线,Success这个标记大家不陌生吧?哎,必须得有这个文件,那么我们这个输出其实就是只有这么一个文件输出。
10:16
哎,输出一个标记而已,只是一个标记哈,这个要注意一下,那么这里面输出到哪呢?我们输出到hideop。下划线。下划线,Output。幺幺可以吧,嗯,这是嗯整个的一个输出,那下面这块我看看啊,是不是少个括号啊。这个行了吧,行,那下面我们来执行一下,看看效果啊,看看效果。走。我们期望输出呢,应该是两个文件对吧?哎,输出两个文件。我们输出到other log,嗯,I googlelo,哎,结束了,结束之后我们回来看一下。
11:03
还豆对吧,这里面有一个at硅谷lo,还有一个outlo啊,仍然还有一个out put11,你看out put11里面是不是只有一个下划线标记啊,对吧?那这里面的at硅谷看一下。打开。诶没问题对吧,过滤出来了,那它过滤出来之后,那我们再来看一下。看下一个other。打开完了,它出问题了,你会发现啊,他把所有的这个网址啊连在一起了啊连在一起了,那这怎么处理呢?啊,其实是这样啊,我们在输出流的时候啊,这里面它没有给你加这个回城换行,比如这块。在输出的时候,你都没有加回中行,我们需要在这儿加一个。杠N。再加一个杠,这样就OK了,那现在我们再来重新执行一下啊,我把这个结果删一下。
12:02
好删掉,删掉之后我们来重新执执行。回来,Driver。右键走。观察一下结果,好,现在结束了,那我们再来看一下这个other。重新加载。看到吧,哎,新在就可以了啊,这个它是默认不给你加这个换行的,一一直往出输出,现在整个这个自定义out不通话呢啊就结束了啊,还是比较简单的啊。
我来说两句