国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

跟天齊老師學Spark(6)--Spark的常用算子介紹

2019-11-11 05:20:04
字體:
來源:轉載
供稿:網友
spark的常用算子介紹:Resilient(彈性且可復原) Distributed(分布式) Datasets(數據集) (RDDs)我們以前學的scala的原生方法都是數組或者集合上定義的,它只能操作單機。而spark中的方法都是定義在RDD上的,它們操作的是集群。spark的方法有兩類操作:一種是:Transformations,它是lazy的,不會觸發任務的執行,是一種轉換(從一種形式變成另一種形式),是延遲加載的;一種是:Actions,執行出結果,是一種動作,是立即加載(執行)的;看一下spark 的常用算子:登錄spark的官網http://spark.apache.org/下面是官方的Spark編程指南:http://spark.apache.org/docs/1.6.2/PRogramming-guide.html在指南的列表目錄中有 Transformations 和 Actions 。Diver是客戶端,它提交程序到spark集群,而計算的返回結果會再發回給Diver客戶端。Transformations有很多,比如說map方法,filter方法,mapPartitions方法,sample方法,union方法,intersection方法,distinct方法,groupByKey方法,reduceByKey方法,aggregateByKey方法,sortByKey方法,join方法,Transformations 的特點是,它是lazy的,并不會觸發任務的執行。有scala的API:http://spark.apache.org/docs/1.6.2/api/scala/index.html#org.apache.spark.rdd.RDD也有java的API:http://spark.apache.org/docs/1.6.2/api/java/index.html?org/apache/spark/api/java/JavaRDD.htmlActions的方法有:reduce方法,collect方法,count方法,first方法,take方法,takaSample方法,takeOrdered方法,saveAsTextFile方法,countByKey方法,foreach方法。---------------------------------------------------------------------說一下spark的第一類算子:Transformations如果要從hdfs中讀取數據,或者從關系型數據庫中讀數據,如果我們的hdfs或者關系型數據庫沒有啟動,此時使用Transformations類型的算子,就不會報錯。因為它只會記錄一下它將從哪里讀取數據。Transformations僅僅是一種轉換操作,而Action則是一些執行操作。spark支持從本地文件系統、hdfs、s3、hbase等讀取數據。在Worker中有一個進程叫做"CoarseGrainedExecutorBackend"進程,它負責讀取數據、對數據進行切分、聚合等操作,都是在Executor中完成的。在Driver端啟動了一個spark-shell,然后在這里寫任務,比如寫一些轉換和Action,在寫轉換的時候,它會在這個spark-shell中記錄我們是怎樣轉換的,一旦觸發Action,Driver端就會把任務提交到我們的Executor上執行,執行返回的結果會收集到Driver端。每個Executor只負責計算其中的屬于它的數據。這就是分布式思維,一個大的任務讓一臺機器去干,它干不了,那么我們就分成很多的小任務,由多臺機器去并行執行。最后將所有的結果收集起來,存到外部存儲介質中。從外部存儲介質中將數據讀進來然后創建的RDD,還有一個種創建RDD的方法://使用spark的并行化方法創建RDD,并指定分區數為2個:sc.parallelize(Array(1,2,3,4,5,6,7,8,9),2),也能創建一個RDD,它會將一個集合或者數組轉換成RDD,還能指定分區數,這里我們給它指定了分區數為2。這樣它就會生成兩個結果文件。就像MapReduce中的一樣,如果有兩個reduce就會有兩個結果文件一樣。RDD上的這些常用算子一定要練習。------------------------------------------------RDD的Action算子:我們把Spark的客戶端叫做Driver。啟動Master;啟動Worker;Worker向Master注冊;Master向Worker反饋;Worker向Master發送心跳。Driver首先會跟Master進行RPC通信(因為我們在shell命令中指定了--master的位置,所以它會去找Master)。向Master申請資源;Master啟動符合條件的Worker來啟動Executor(Master會告訴Worker啟動Executor這個java子進程。Executor進程是由Worker進程啟動的。);Executor會主動跟Driver進行通信(因為Driver會把它的一些信息發送給Master,而Master會把Driver的信息封裝起來,發送給Worker,而Executor就通過Worker知道了Driver的信息,所以就能找到Driver了),接下來就可以寫spark程序了。可以為數據指定分區的。一個分區一定屬于一臺機器,但是一臺機器可能有多個分區。數據的讀取和計算都是在Executor中完成的。 rdd的foreachPartition方法可以將數據取出來存到關系型數據庫中(后面再介紹)。
上一篇:XMLParser 詳解

下一篇:codevs 2664_上廁所

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 井冈山市| 资兴市| 津南区| 扎鲁特旗| 礼泉县| 海淀区| 且末县| 宜君县| 友谊县| 乡城县| 长岛县| 那坡县| 洛南县| 高青县| 横山县| 高唐县| 玉林市| 梧州市| 奉新县| 揭阳市| 微山县| 麦盖提县| 新郑市| 清水河县| 寻甸| 宜宾县| 泰州市| 伽师县| 云龙县| 云安县| 许昌市| 郁南县| 洞口县| 虹口区| 偃师市| 册亨县| 平罗县| 漯河市| 油尖旺区| 商洛市| 齐河县|