這篇文章主要是關于Spark的快速熟悉和使用,我們使用Python和Spark的shell接口來操作Spark。 Spark shell使得我們可以很簡單的學習Spark的Api,同時也是一個強大資料分析互動的工具。
我們使用Python版本的Spark工具pyspark,前提是Spark的安裝路徑已經加到環境變量PATH中,否則會報找不到指令 特别說明: >>>表示的所pyspark的指令
Spark核心的抽象是彈性分布式資料集合,我們稱為RDD(Resilient Distributed Dataset)。一個RDD可以從輸入檔案中産生比如HDFS檔案,也可以從其他RDD轉換而來。
我們通過讀取本地檔案text.dat來建立一個新的RDD
RDD包括兩種運算操作,action和transformation。action操作會傳回值,例如count(),transformation操作則是傳回一個新的RDD,例如filter()。
2). RDD action操作
3). RDD transformation操作
4). RDD的操作支援連結在一起操作
1). RDD的action和transformation可以用在更複雜的計算上面
說明: map産生一個新的RDD,RDD每個值是一個整數,等于每一行長度的1/2.reduce産生另一個新的RDD,對于key相同的資料取整數值最大的那個.(預設情況下key都相同)
在這裡我們采用的是python的lambda來代替函數, 是以上面的代碼等價于下面的代碼
對于Hadoop的MapReduce來說,Spark可以很容易就實作,比如常見的word count
在這裡我用到了flatMap 這個api, 把一行映射為多行并産生一個新的RDD.再用map把映射為pair(word, 1), 最後用reduce把相同word的count相加. 我們可以用collect action以list方式輸出RDD資料
Spark支援把資料緩存到記憶體中, 很多時候當某些資料被頻繁利用的時候緩存資料到記憶體是非常有用的. 比如當我們在計算網頁PageRank的時候可以把經常用的query集合緩存到記憶體中
同理我們也可以使用Spark API編寫Spark應用程式
現在我們用Python API編寫一個Spark的應用程式, 命名為simple_app.py
我們用spark-submit來送出這個應用程式
快速的完成了Spark的第一個應用程式,後面我們會對Spark的各個子產品進入更深的研究