PysparkNote001---Mac下JupyterNoteBook配置pyspark

下面这一通设置只是在我的电脑上走通了,参考性存疑。可以多看看文中的参考文章。

  每一次安装环境都是伤筋动骨的,心塞塞。由于线上zeppline实在是不太友好,而且和集群相关联,怕有所影响。所以本地安装pyspark,以便学习所用。

1. 环境

  1. Mac:macOS High Sierra 10.13.4
  2. Spark:spark-2.3.0-bin-hadoop2.6

2. Spark安装

2.1 java安装

  比较坑爹,之前学app爬虫,装的jdk10,spark好像不支持。建议安装jdk8,stackoverflow有讨论,可参看https://stackoverflow.com/questions/48603071/illegalargumentexception-with-spark-collect-on-jupyter。实测可行,jdk8的可以在https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载。
  报错信息为:

py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.

2.2 Spark下载

  官网地址:http://spark.apache.org/downloads.html,为了保持和公司集群的版本保持,下载版本选择spark-2.3.0-bin-hadoop2.6 。
  官网下载速度感人,可以选择清华镜像https://mirrors.tuna.tsinghua.edu.cn/apache/spark/。下载压缩文件spark-2.3.1-bin-hadoop2.7.tgz(清华镜像站点没有我所需要的版本)。

2.3 Spark安装

  安装本身没有问题,只需要把文件解压缩在指定目录下,比如我把文件解压在/Users/Simple/Coding/Spark/下。下面需要添加环境变量,添加代码为:

# 查看配置文件
cat ~/.bash_profile
# 用vi命令添加环境变量
# add spark
export SPARK_HOME=/Users/Simple/Coding/Spark/spark-2.3.0-bin-hadoop2.6
export PATH="$PATH:${SPARK_HOME}/bin"

  添加完环境变量后要执行以下命令:

source ~/.bash_profile

  在shell下输入pyspark即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vi1jyvq8-1575010408400)(pic0.jpg)]

3 Pyspark相关配置

3.1 python解释器的选择

  最开始,pyspark默认的解释器应该为系统自带的python解释器,在我的Mac中python为python2.7,python3为Python3.6

3.2 在Jupyter Notebook中使用Pyspark

  有几种方式,分别介绍。

3.2.1 在代码里添加路径

  该方法不依赖jupyter,pycharm等都可以使用。选择pyspark对应的解释器,创建一个新的jupyter notebook。在import pyspark时,先执行以下代码:

import os
import sys
os.environ['SPARK_HOME'] = "/Users/Simple/Coding/Spark/spark-2.3.0-bin-hadoop2.6"
sys.path.append("/Users/Simple/Coding/Spark/spark-2.3.0-bin-hadoop2.6/python")
sys.path.append("/Users/Simple/Coding/Spark/spark-2.3.0-bin-hadoop2.6/python/lib/py4j-0.10.7-src.zip")

from pyspark import SparkContext
from pyspark import SparkConf
sc = SparkContext('local')
words = sc.parallelize(["scala", "java", "hadoop", "spark", "akka"])
print(words.count())
5

3.2.2 利用findspark包

  直接调包,显得整洁一点。

import findspark
findspark.init()
from pyspark import SparkContext
from pyspark import SparkConf
sc = SparkContext()
words = sc.parallelize(["scala", "java", "hadoop", "spark", "akka"])
print(words.count())
sc.stop()
5

3.2.3 修改配置文件

  修改配置文件如下:

export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"

此时在命令行输入pyspark跳到jupyter中。不过还是不太方便,最好的方式应该是在jupyter中可以选择,类似选择python2、python2、R这样最方便了。

3.2.4 添加pyspark的kernel

  暂时说不出来为啥这么做,但是似乎可行,能用。在anaconda3安装目录anaconda3/share/jupyter/kernels新建文件夹spark2,该文件下新增json文件,文件内容为:


{"argv": 
["/Users/Simple/Coding/Py-Software/anaconda3/envs/python2/anaconda2/bin/python",
 "-m",
 "IPython.kernel", 
 "-f", 
 "{connection_file}"
],
 "display_name":"PySpark2",  
 "language":"python" ,
 "env": {
  "SPARK_HOME": "/Users/Simple/Coding/Spark/spark-2.3.0-bin-hadoop2.6",
  "PYTHONPATH": "/Users/Simple/Coding/Spark/spark-2.3.0-bin-hadoop2.6/python:/Users/Simple/Coding/Spark/spark-2.3.0-bin-hadoop2.6/python/lib/py4j-0.10.6-src.zip",
  "PYTHONSTARTUP": "/Users/Simple/Coding/Spark/spark-2.3.0-bin-hadoop2.6/python/pyspark/shell.py ",
  "PYSPARK_SUBMIT_ARGS": "pyspark-shell"
 }
}

大概就是如此,反正可以用。具体可以参考:
[1] https://docs.anaconda.com/ae-notebooks/admin-guide/install/config/custom-pyspark-kernel/
[2] https://blog.csdn.net/moledyzhang/article/details/78850820
此外,由于目前没有安装hadoop,运行pyspark时会生成莫名其妙的文件,等下次有方法再补充。

4. 乱七八糟的坑

4.1 终端执行pyspark

  在终端执行pyspark时,会出现derby.log、metastore_db两个文件,也不知道这是啥,总之,在/User下会出现就是了。可以把他们放在指定目录下,在spark/conf下执行编辑spark-default.conf文件,如果没有复制对应template文件即可。

spark.local.dir  /Users/Simple/Coding/Spark/spark2.3-localdata  
SPARK_LOCAL_DIRS  /Users/Simple/Coding/Spark/spark2.3-localdata    
spark.eventLog.dir  /Users/Simple/Coding/Spark/spark2.3-localdata/logdata    
## 前面是设置临时文件啥的,改变derby用下面的
spark.driver.extraJavaOptions -Dderby.system.home=/Users/Simple/Coding/Spark/spark2.3-localdata/derby_data

参考:https://stackoverflow.com/questions/38377188/how-to-get-rid-of-derby-log-metastore-db-from-spark-shell/40541384#40541384

4.2 jupyter中执行

  jupyter中执行代码,会出现莫名其妙的文件夹,最后目录为spark-warehouse,可以改下设置,同样的,不知道为啥这么改,醉了。接触的越多,感受自己的局限性越大。

spark.sql.warehouse.dir  /Users/simple/Coding/Spark/spark2.3-localdata/warehouse

参考:https://stackoverflow.com/questions/44781067/how-do-i-launch-pyspark-and-arrive-in-an-ipython-shell/44810603#44810603

你可能感兴趣的:(★★★PySpark,#,★★Pyspark基础)