Spark 能夠獨立安裝使用,也能夠和 Hadoop 一塊兒安裝使用。在安裝 Spark 以前,首先確保你的電腦上已經安裝了 Java 8
或者更高的版本。html
訪問Spark 下載頁面,並選擇最新版本的 Spark 直接下載,當前的最新版本是 2.4.2 。下載好以後須要解壓縮到安裝文件夾中,看本身的喜愛,咱們是安裝到了 /opt
目錄下。python
tar -xzf spark-2.4.2-bin-hadoop2.7.tgz mv spark-2.4.2-bin-hadoop2.7 /opt/spark-2.4.2
爲了能在終端中直接打開 Spark 的 shell
環境,須要配置相應的環境變量。這裏我因爲使用的是 zsh
,因此須要配置環境到 ~/.zshrc
中。shell
沒有安裝 zsh 的能夠配置到
~/.bashrc
中apache
# 編輯 zshrc 文件 sudo gedit ~/.zshrc # 增長如下內容: export SPARK_HOME=/opt/spark-2.4.2 export PATH=$SPARK_HOME/bin:$PATH export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH
配置完成後,在 shell
中輸入 spark-shell
或者 pyspark
就能夠進入到 Spark 的交互式編程環境中,前者是進入 Scala
交互式環境,後者是進入 Python
交互式環境。編程
在這裏介紹兩種編程環境,Jupyter
和 Visual Studio Code
。前者方便進行交互式編程,後者方便最終的集成式開發。bash
首先介紹如何在 Jupyter
中使用 Spark,注意這裏 Jupyter notebook 和 Jupyter lab 是通用的方式,此處以 Jupyter lab 中的配置爲例:dom
在 Jupyter lab 中使用 PySpark 存在兩種方法:編輯器
pyspark
將自動打開一個 Jupyter lab;findSpark
包來加載 PySpark。第一個選項更快,但特定於Jupyter筆記本,第二個選項是一個更普遍的方法,使PySpark在你任意喜歡的IDE中均可用,強烈推薦第二種方法。ide
更新 PySpark 啓動器的環境變量,繼續在 ~/.zshrc
文件中增長如下內容:oop
export PYSPARK_DRIVER_PYTHON=jupyter export PYSPARK_DRIVER_PYTHON_OPTS='lab'
若是要使用 jupyter notebook,則將第二個參數的值改成 notebook
刷新環境變量或者重啓機器,並執行 pyspark
命令,將直接打開一個啓動了 Spark 的 Jupyter lab。
pyspark
在 Jupyter lab 中使用 PySpark 還有另外一種更通用的方法:使用 findspark
包在代碼中提供 Spark 上下文環境。
findspark
包不是特定於 Jupyter lab 的,您也能夠其它的 IDE 中使用該方法,所以這種方法更通用,也更推薦該方法。
首先安裝 findspark:
pip install findspark
以後打開一個 Jupyter lab,咱們在進行 Spark 編程時,須要先導入 findspark 包,示例以下:
# 導入 findspark 並初始化 import findspark findspark.init() from pyspark import SparkConf, SparkContext import random # 配置 Spark conf = SparkConf().setMaster("local[*]").setAppName("Pi") # 利用上下文啓動 Spark sc = SparkContext(conf=conf) num_samples = 100000000 def inside(p): x, y = random.random(), random.random() return x*x + y*y < 1 count = sc.parallelize(range(0, num_samples)).filter(inside).count() pi = 4 * count / num_samples print(pi) sc.stop()
運行示例:
Visual Studio Code
做爲一個優秀的編輯器,對於 Python
開發十分便利。這裏首先推薦我的經常使用的一些插件:
此外,在 VScode
上使用 Spark 就不須要使用 findspark
包了,能夠直接進行編程:
from pyspark import SparkContext, SparkConf conf = SparkConf().setMaster("local[*]").setAppName("test") sc = SparkContext(conf=conf) logFile = "file:///opt/spark-2.4.2/README.md" logData = sc.textFile(logFile, 2).cache() numAs = logData.filter(lambda line: 'a' in line).count() numBs = logData.filter(lambda line: 'b' in line).count() print("Lines with a: {0}, Lines with b:{1}".format(numAs, numBs))