進入到大數(shù)據(jù)圈的朋友們都對Spark的強大功能有所了解,那么提到Spark,我們就想到了其中的算子,Spark的強大功能如何實現(xiàn),自然離不開其中的算子了。怎么理解這些算子呢,我們可以簡單把它理解為方法或函數(shù),Spark已經(jīng)定義好了很多功能強大的方法或函數(shù),在這里稱為算子。
Spark中的算子分為兩類:一是轉(zhuǎn)換類算子(Transformation),二是行動類算子(Action)。轉(zhuǎn)換類算子執(zhí)行后得到新的RDD,并且不會立即執(zhí)行,需要有行動類算子觸發(fā)才能執(zhí)行。行動類算子是立即執(zhí)行的,并且執(zhí)行后得到的不再是RDD。
這次,我們用命令行的方式先來看看這些算子如何使用。
首先,我們進入spark-shell命令行方式:
[root@node2 ~]# spark-shell --master spark://node1:7077
執(zhí)行上面命令后,就進入了命令行方式:
此時,我們就可以測試使用Spark中的算子了。
有一點我們要注意的 ,這些算子都是作用在RDD上,所以我們首先要得到RDD。
map算子
map算子實現(xiàn)的是一一映射。
對某一個rdd執(zhí)行map,rdd中每一條數(shù)據(jù)都會執(zhí)行操作。也就是說rdd中有幾條數(shù)據(jù),就會被迭代幾次。
執(zhí)行map算子后返回值的數(shù)據(jù)類型,取決于給map傳遞的函數(shù)的返回值類型。
scala> val rdd=sc.makeRDD(List(1,2,3,4,5,6,7),3)
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[3] at makeRDD at :24
首先,我們通過makeRDD,將一個list轉(zhuǎn)換成RDD,并且指定分區(qū)數(shù)為3。
scala> val rdd1=rdd.map(_>5)
rdd1: org.apache.spark.rdd.RDD[Boolean] = MapPartitionsRDD[4] at map at :26
執(zhí)行map算子,傳遞的函數(shù)是判斷元素是否大于5,結(jié)果得到一個新的的RDD,并且元素類型是Boolean類型。由此我們也可以看到,結(jié)果RDD的元素類型就是由傳入map算子的函數(shù)決定的。
此時,實際上還沒有真正執(zhí)行,我們需要使用一個Action算子觸發(fā)執(zhí)行。
scala> rdd1.collect
[Stage 0:===================> res0: Array[Boolean] = Array(false, false, false, false, false, true, true)
我們使用collect算子觸發(fā)執(zhí)行,得到結(jié)果。Collect算子是Action類算子,是將結(jié)果回收到客戶端。在生產(chǎn)環(huán)境中,要慎用此算子。我們測試中因為數(shù)據(jù)量非常小,用此算子是沒有問題的。
>>本文地址:http://liujunjsxg.cn/zhuanye/2021/69184.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學歷
3 您更想做哪個方向的工作?