學校一門 Big Data Computing
需要學習Spark in Python。
這篇文章記錄一下安裝PySpark和Jupyter Notebook上運作Spark的步驟。
Prerequisite
我的系統是:Ubuntu 18.06 LTS
- 已經裝好了python2和3(如果沒有可以看看這個 連結 )
- 裝好了jupyter notebook,沒有的話自行google吧
- 裝了Java 8或更高版本的Java(沒有,也可以看看這個
PySpark Installation Steps
1.去
Spark downloads page.選擇最新的Spark Release包(a prebuilt package for Hadoop), 然後直接下載下傳。我現在的版本是
Spark 2.3.1(Jun 08 2018)。
- 去到下載下傳檔案夾,将檔案移到home目錄下并解壓
$ cd Downloads
$ mv spark-2.3.1-bin-hadoop2.7.tgz ~/
$ tar -zxf spark-2.3.1-bin-hadoop2.7.tgz
3.聲明一下環境變量
$ sudo vim ~/.bashrc
在檔案尾部添加
export SPARK_HOME=/home/usrname/spark-2.3.1-bin-hadoop2.7
export PATH=$PATH:/home/username/spark-2.3.1-bin-hadoop2.7/bin
export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH
export PATH=$SPARK_HOME/python:$PATH
重新運作一下剛剛修改的初始化檔案
$ source ~/.bashrc
安裝成功的話,輸入
pyspark
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 2.3.1
/_/
Using Python version 2.7.15rc1 (default, Apr 15 2018 21:51:34)
SparkSession available as 'spark'.
我看到StackOverflow上面說,現在也可以直接運作來安裝,但是貌似沒有特别好去配置你的環境變量.我的同學是用
pip install pystark
方法裝的,現在開學第一周,也沒瞧出什麼差別,問了TA跟我說隻要不影響你寫project,什麼安裝方法都行。(吐槽一下:這什麼鬼回答....)
PyPI
PySpark in Jupyter
在Jupyter Notebook裡運作PySpark有兩種方法:
- 配置PySpark driver,當運作
指令就直接自動打開一個Jupyter Notebookpyspark
- 正常啟動Jupyter Notebook,然後用findSpark的package(我選了這種)
方法一:配置PySpark driver
去
~/.bashrc
檔案最後,添加配置PySpark driver的環境變量
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'
同樣,運作一下剛剛修改的初始化檔案
$ source ~/.bashrc
最後,重新開機terminal
$ pyspark
這個時候,就會自動打開Jupyter Notebook。
方法二:用findSpark包
安裝findspark:
$ pip install findspark
啟動jupyter notebook
$ jupyter notebook
Jupyter Notebook運作效果
附上代碼,大家運作感受一下:
#方法2需要複制這三行
import findspark
findspark.init()
import pyspark
#方法1直接從這裡開始複制
import random
sc = pyspark.SparkContext(appName="Pi")
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()
Output:

實測,Python3的運作速度會比Python2的快很多,我不知道為什麼我們TA跟我說用“Python 2 is better。”
常見問題(不斷更新)
1.Python使用spark時出現版本不同的錯誤
import os
#for python 3
os.environ["PYSPARK_PYTHON"]="/usr/bin/python3"
#for python 2
os.environ["PYSPARK_PYTHON"]="/usr/bin/python"
我的電腦上的python的路徑是
/usr/bin/python
,你可以運作
where python
check一下你的Python2的安裝路徑