Spark簡述
下圖是Spark和MapReduce進(jìn)行邏輯回歸機(jī)器學(xué)習(xí)的性能比較,Spark比MapReduce快100多倍沾谜。
除了速度更快,Spark和MapReduce相比胀莹,還有更簡單易用的編程模型基跑。使用Scala語言在Spark上編寫WordCount程序,主要代碼只需要三行描焰。
val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://...")
Spark核心概念
RDD
RDD是Spark的核心概念媳否,是彈性數(shù)據(jù)集(Resilient Distributed Datasets)的縮寫。RDD既是Spark面向開發(fā)者的編程模型荆秦,又是Spark自身架構(gòu)的核心元素篱竭。
Spark則直接針對數(shù)據(jù)進(jìn)行編程,將大規(guī)模數(shù)據(jù)集合抽象成一個(gè)RDD對象步绸,然后在這個(gè)RDD上進(jìn)行各種計(jì)算處理掺逼,得到一個(gè)新的RDD,繼續(xù)計(jì)算處理瓤介,直到得到最后的結(jié)果數(shù)據(jù)坪圾。所以Spark可以理解成是面向?qū)ο蟮拇髷?shù)據(jù)計(jì)算。我們在進(jìn)行Spark編程的時(shí)候惑朦,思考的是一個(gè)RDD對象需要經(jīng)過什么樣的操作,轉(zhuǎn)換成另一個(gè)RDD對象漓概,思考的重心和落腳點(diǎn)都在RDD上漾月。
轉(zhuǎn)換函數(shù)
RDD上定義的函數(shù)分兩種:
- 一種是轉(zhuǎn)換(transformation)函數(shù),這種函數(shù)的返回值還是RDD胃珍;
- 另一種是執(zhí)行(action)函數(shù)梁肿,這種函數(shù)不再返回RDD。
RDD定義了很多轉(zhuǎn)換操作函數(shù)觅彰,比如有計(jì)算map(func)吩蔑、過濾filter(func)、合并數(shù)據(jù)集union(otherDataset)填抬、根據(jù)Key聚合reduceByKey(func, [numPartitions])烛芬、連接數(shù)據(jù)集join(otherDataset, [numPartitions])、分組groupByKey([numPartitions])等十幾個(gè)函數(shù)飒责。