2.1 下載Spark
略
2.2 Spark中Python和Scala的shell
Spark shell可用來與分散式儲存在許多機器的記憶體或者硬碟上的資料進行互動,並且處理過程的分發由Spark自動控制完成。
降低shell日誌級別:conf目錄下建立名為log4j.properties檔案,將log4j.properties.template檔案中內容複製到log4j.properties檔案,找到log4j.rootCategory=INFO, console,將其改為log4j.rootCategory=WARN, console
例2.1: Python行數統計
>>> lines = sc.textFile("README.md") >>> lines.count() 103 >>> lines.first() u'# Apache Spark'
例2-2: Scala行數統計
scala> val lines = sc.textFile("README.md") lines: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[1] at textFile at <console>:24 scala> lines.count() res0: Long = 103 scala> lines.first() res1: String = # Apache Spark
2.3 Spark核心概念簡介
從上層來看,每個Spark應用都由一個驅動器程式來發起叢集上的各種並行操作。驅動器程式包含應用的main函式,並且定義了叢集上的分散式資料集,還對這些分散式資料集應用了相關操作。
驅動器程式通過一個SparkContext物件來訪問Spark。這個物件代表對計算叢集的一個連線。
一旦有了SparkContext,你就可以用它來建立RDD。
要執行這些操作,驅動器程式一般要管理多個執行器節點。比如,如果我們在叢集上執行count()操作,那麼不同的節點會統計檔案的不同部分的行數。
例2-4:Python版本篩選的例子
>>> lines = sc.textFile("README.md") >>> pythonLines = lines.filter(lambda line:"Python" in line) >>> pythonLines.first() u'high-level APIs in Scala, Java, Python, and R, and an optimized engine that'
例2-5:Scala版本篩選的例子
scala> val lines = sc.textFile("README.md") lines: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[1] at textFile at <console>:24 scala> val pythonLines = lines.filter(line => line.contains("Python")) pythonLines: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at filter at <console>:26 scala> pythonLines.first() res0: String = high-level APIs in Scala, Java, Python, and R, and an optimized engine that
Spark會自動將函式(比如line.contains("Python"))發到各個執行器節點上。這樣,就可以在單一的驅動器程式中程式設計,並且讓程式碼自動執行在多個節點上。
2.4 獨立應用
Spark也可以在Java、Scala或Python的獨立程式中被連線使用,這與在shell中使用的區別在於我們需要自行初始化SparkContext。
在Python中,我們可以把應用寫成Python指令碼,然後用Spark自帶的bin/spark-submit指令碼來執行。例:bin/spark-submit my_script.py
2.4.1 初始化SparkContext
例2-7:在Python中初始化Spark
from pyspark import SparkConf, SparkContext conf = SparkConf().setMaster("local").setAppName("My App") sc = SparkContext(conf = conf)
例2-8:在Scala中初始化Spark
略
2.4.2 構建獨立應用
待學習。