温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
好,同学们,我们刚才呢,给大家演示了一下系统累加器的功能啊,那么其实累加器呢,是在我们执行作业当中啊,对一些我们的事件呢,进行一些累加计数所实现的功能啊,是这样的,那么在实践的过程当中啊,其实它会产生一些问题,这是我们接下来要给大家演示的,来首先看一看,把这个呢,我们改成零三啊改成零三,嗯。好,点击OK啊,然后呢,我放到这个地方,嗯,可以了,那接下来呢,我们看一看啊,我们这里采用的是RDD.for each,我把这个我们的它改成一个map,嗯,然后呢,再把咱们这个地方呢给它返回一个好了,那这个时候呢,我们再去执行它。运行一下啊。那么执行过程当中啊,我们去看一看它的执行结果啊。好,大家有没有发现这个时候计算结果为零,诶我就改了一个方法名,它怎么就会出现零呢?跟之前的结果就不一样,对不对,为什么这个就出现了累加器的一个什么呢?叫少加的问题。
01:08
啊,数值它少加了,为什么会出现少加呢?是因为我们的map它是转换算值,它其实在没有触发作业执行的操作过程当中,它是不执行的,所以呢,我们说了啊,咱们的这个什么呢?呃,转换啊,咱们叫转换啊算子。中我们叫做调用啊,调用我们的累加器啊,如果他不,呃,如果啊,没有我们叫行动算子的话,那么行动算子的话,那么他不会执行,这个咱们是讲过对不对,所以你的数值就少加了,你别看你这好像是挨个便利,但是其实它并不会被触发,这是我们数值少加的情况,其实还有一种情况是什么呢?是多加的情况啊,来同们看,嗯。来,我们写上啊,咱们叫做多加,什么叫做多加呢?诶咱们在这写上一个啊,咱们叫做map,哎,咱们的RDD,然后拿过来,拿过来以后同学看啊,在我的这个地方点,我们叫collect,诶咱们叫collect好,然后再来,那么这个时候呢,我们再来运行啊运行。
02:17
你运行之后看结果啊,这个时候的数据,你看看结果是什么。你会发现结果是20,其实按照道理上来讲的话,这个地方应该是1234累加之应该是十吧,但是它会是20,为什么?因为啊,我们这个累加器。他在当前是全局共享的,所以呢,你的这个。我们的行动算子你掉一次它会走一遍,你掉一次会走一遍,所以在这种情况下,它就会两次累加,所以啊就会出现多加的情况啊,那所以说还是会出现问题,对不对?所以啊,它就是因为转换算子当中,它要么不执行,要么你多次执行,他会做这个操作,其实大家想想我写个cash是不是也可以解决啊,你要写个cash的话,它就不就不会执行了吗?对不对,所以啊,其实我们可以解决这样的问题啊,但是我们还是需要考虑到,那该怎么去做,其实我们一般情况下会放在我们的行动算子当中啊,所以呢,我们说一下,咱们一般情况下啊,一般情况下我们的累加器,它会放置在我们的行动啊算子中进行操作,嗯,进行啊,操作好了啊,这个呢,咱们稍微注意一下啊。
我来说两句