1. 程式人生 > >[大資料]spark入門 in python(一)HelloWorld

[大資料]spark入門 in python(一)HelloWorld

之前由於工作的需要玩了快一年的hadoop,做了一些資料分析的基礎工作。

自然,hadoop用做離線分析還是完全滿足需求的,無論是自己寫mapreduce程式碼開發

又或者使用hive來便利分析,但是面對實時計算,就需要跟高一層級的框架了,storm,spark

就是對應的技術了,於是自己開始學習spark,作為半路出家的選手自然選用了python作為開發語言

下面就是自己的spark學習筆記了,主要參考書籍:Spark快速大資料分析

spark支援多種開發語言,scala,java,python等

scala,java都不熟,於是乎採用了python,一種:一種方法解決所有問題的語言。

一句話總結:spark是一個基於記憶體的大資料計算框架,

上層包括了:Spark SQL類似HiveQL, Spark Streaming 實時資料流計算,MLlib 機器學習演算法包,GraphX 圖演算法包

底層 SparkCore 實現了基本功能:任務排程,記憶體管理,錯誤恢復,儲存互動等,SparkCore還包含了對RDD(彈性分散式資料集)的API定義

RDD是Spark對計算任務封裝,現在不懂也沒關係,後面會隨著例項進一步理解RDD

一、Spark安裝:

單機版本spark安裝相當簡單,從官網下載一個原始碼包,解壓即可。http://spark.apache.org/downloads.html

解壓,把bin目錄加入環境變數,pyspark即可啟動python shell

單機模式啟動pyspark後

一個簡單的demo:

>>>lines = sc.textFile("1.txt") //建立一個RDD,“1.txt為本地存在的檔案

>>> lines                                                                  

MapPartitionsRDD[4] at textFile at NativeMethodAccessorImpl.java:-2

>>> lines.count()

7

通過lines物件,可以呼叫基本的函式,統計單詞數等

例子中sc是什麼呢?SparkContext。

每一個spark應用都有一個驅動器程式()來發起叢集上的各種並行操作,pyspark即驅動器程式,

驅動器程式通過一個SparkContext物件來訪問Spark,sc代表對計算叢集的一個連線。

驅動器程式一般要管理多個執行器節點,將計算任務分發給不同的節點計算。

下面繼續完成大資料下的Helloword:word count 程式:

>>> words = lines.flatMap(lambda line: line.split(' '))

>>> words

PythonRDD[8] at RDD at PythonRDD.scala:43

>>> wc = words.map(lambda x:(x,1))

>>> wc

PythonRDD[9] at RDD at PythonRDD.scala:43

>>> from operator import add

>>> counts = wc.reduceByKey(add)

>>> counts

PythonRDD[14] at RDD at PythonRDD.scala:43

>>> counts.saveAsTextFile("wc")

示例中可以看出 lines,words,wc,counts都是RDD物件例項

每一步操作在Spark都是RDD的一個抽象

獨立應用,不通過shell怎麼寫獨立的指令碼呢,

直接編寫校本檔案,然後通過spark-submit提交即可

eg:worldcount程式的py指令碼如下:

########first.py############

from pyspark import SparkConf, SparkContext
from operator import add

conf = SparkConf().setMaster("local").setAppName("My App")
sc = SparkContext(conf=conf)

lines = sc.textFile("/Users/xiabin/1.txt")

words = lines.flatMap(lambda line: line.split(' '))
wc = words.map(lambda x:(x,1))
counts = wc.reduceByKey(add)

counts.saveAsTextFile("wcres")

########first.py############

測試中還發現,spark-submit可以智慧的識別應用的一些py模組,比如import一個myconf.py檔案

或者一個包都可以無需新增任何程式碼執行(只單機實驗)。

第一次接觸下來對比寫hadoop的mapreduce程式碼,spark的封裝呼叫相對來說簡單了不少。