00:00
好,接下来呢,我们就自己制定一个分区啊,那首先看一下需求啊,说将统计结果按照手机归属地不同省份输出到不同的这个文件当中,那输入数据。这个很熟了吧,这就是我们最原始手机号流量那个输入数据哈,一模一样的没变,那再往下我们期望输出的结果呢,是手机号136 137 138 139开头的放在每一个独立的四个文件当中,那其他开头的呢,放在一个文件里面,那最终就是五个文件呗,是这意思吧,好。需求分析一下。输入数据期望输出的结果五个文件。那么我们怎么来实现这个功能呢?你要想控制最终文件输出的个数,那我们通常的做法呢,就是增加一个分区,那这个分区我们会将这个手机号是136开头的。设置为0137开头的1138139其他。对吧,哎,这样一套流程哈,好。
01:01
那下面呢,这个一共三步嘛,你这个定义完这个类之后,第二步你需要在驱动类当中关联一下对应的这个新自定义的分区,同时还要设置一下reduce text的个数,你要不设置它的话,那不白忙活了吗?因为默认这个reduce text是一,而且还不会走你这个分区对吧?啊,行,那我们先来写一下呗。写一下,写一下的话,我们就基于我们之前这个案例,之前哪一个案例啊。手机流量。这把序列化这个吧。啊,手机号流量啊,就根据这个案例啊,一模一模一样不用动啊,不用动的基础上呢,改啥呢,只改它的驱动。我们回来啊,回来。给大家实操一下啊,我把原来这个right包这块我先定一个吧。用一个package parter two啊第二案例。我把原来的这个一模一样的拷贝过来粘贴。
02:03
OK,拷贝过来之后啊,这里面我们单独拗一个类。因为谁呢?帕aner,哎,那这个名字用他的吧。省份分区。比较长啊。好,第一个类,第一步定义类呢,之后继承partaner对不对,Partaner这里面有两个选哪一个选长的啊,记住啊选长的,长的好用。之后。这里面要有对应的这个泛型,你看一下啊泛型KV,那这里面的KV怎么设置。分析一下我这个parter是从哪出来的,是不是从map方法出来对吧,然后经过分区。最终去了reduce,方法好,那map里面有输入的KV和输出的kv reduce呢,有输入的KV和输出的KV,那你想想这个分区它的KV应该是谁?
03:03
是不是就是map输出对应的KV啊,哎,那好,那这个KV呢。拿过来找一下T的手机号以及流量。往这一放,往这一放之后发现还报错,Alt加回车实现里面的方法。这不就行了吗?哎,重写它,那重写它的话,这里面传进来K,传进来Y6K是谁?K是对应的手机号啊,比如说它是手机号,那我们按照手机号的前三位进行控制分区,那你怎么办?我这是test类型,那我得转换成string得到它之后one啊,For得到。得到它之后,我们要取手机号的前三位,前三位怎么取呢?phone.subsre对不对?哎,然后begin从零开始取到哪取到三。
04:01
啥意思?包左不包右012对吧?哎,012前三位,那这个三呢是没包进去啊,然后点Y,那这呢是p re printon啊,Pre算得到前三位,得到前三位之后我要进行判断了,判断什么呢?说if,如果我手机号是136开头的,点equal等于pre啊,记住啊,一般我们是把这个常量放在前面进行一个比较啊,防止控制帧行,然后呢,那如果是这个,我是不是得定一个变量作为一个返回值啊。那变量我定义一个in,为什么是int?因为它的反复值类型p r t part等于,哎,默认值我也不给了啊。直接在这里面都复制它呢,首先136网复制给零号分区,然后else if。
05:00
137.2equals three four OK。还再来那下一个呢,就是分区一啊,这有点太慢了啊,这样就行。好,137138139。零号分区一号分区二号分区三号分区else,其他所有号码part。塔tan等于四不就行了吗?然后这块别忘了啊,最后的返回值返回的是塔tan。OK。这样整个代码呢,就写完了,写完之后啊,哎,我们还需要第二步和第三步,那第二步呢,回到这个Java驱动类。然后这里面设置一下,比如说让你刚才写的这个。Partaner得跟你这个job呀建立连接,Part class,你要不建立连接,他默认走的仍然是哈西parter对吧?那p profit class class OK,这是第二步,那第三步呢,你还要设置一下这个number reduce pass个数是几呢?五,因为我这里面的分区数是不是012345啊啊,那五,那我这里面就设置五。
06:19
OK,那最终这个输出。输出。应该是五吧,你看五有没有啊。改个路径。没有吧,哎五这个没有,没有的话我们就用它。行,那下面呢右键。执行。看看效果怎么样啊?我们期望呢是输出五个文件。能不能达到我们的效果?看看好了,是不是五个,哎,五个打开。对吧,043210,我零号分区是136开头的。一号分区呢,对应的137,二号分区138,三号分区139。
07:04
四号分区对应的是。其他杂七杂八对吧,哎,其他一些开头的啊,这也就是我们整个这个呃,自定义分区相关的案例,可以控制输出多个文件啊,这种方式呢,也是非常好用的哈。
我来说两句