您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

捆绑用于PySpark的Python3软件包会导致导入丢失

捆绑用于PySpark的Python3软件包会导致导入丢失

:有一个内聚的回购,其中包含一个示例项目,该项目非常出色。您应该看一下,尤其是如果下面的示例对您不起作用时。仓库在这里https : //github.com/massmutual/sample-pyspark- application 并包括在YARN上运行的以下示例:https ://github.com/massmutual/sample-pyspark-application/blob/master/setup -and- submit.sh 要求您首先导出几个环境变量。(我提供的值特定于EMR,因此您的值可能有所不同。)

export HADOOP_CONF_DIR="/etc/hadoop/conf"
export PYTHON="/usr/bin/python3"
export SPARK_HOME="/usr/lib/spark"
export PATH="$SPARK_HOME/bin:$PATH"

如此处所述:我似乎无法在Spark上使–py- files正常工作 ,有必要使用诸如virtualenv之类的东西(或者conda可能起作用),以避免遇到与Python包的C库编译相关的问题( (例如Numpy)依赖于底层硬件体系结构,其方式由于依赖项和/或任务节点中的硬链接可能与主节点实例的硬件不同而无法成功移植到群集中的其他计算机。

--archives和–py- files之间的一些区别在这里讨论:在pyspark作业中运送和使用virtualenv

我建议将–archives与virtualenv一起使用,以提供包含程序包依赖项的压缩文件,以避免我上面提到的某些问题。

例如,在Amazon Elastic Map Reduce(EMR)集群中,虽然将它ssh到了主实例中,但是我能够成功地使用spark- submit从virtualenv环境中执行测试python脚本,如下所示:

pip-3.4 freeze | egrep -v sagemaker > requirements.txt
# Above line is just in case you want to port installed packages across environments.
virtualenv -p python3 spark_env3
virtualenv -p python3 --relocatable spark_env3
source spark_env3/bin/activate
sudo pip-3.4 install -U pandas boto3 findspark jaydebeapi
# Note that the above libraries weren't required for the test script, but I'm showing how you can add additional dependencies if needed.
sudo pip-3.4 install -r requirements.txt
# The above line is just to show how you can load from a requirements file if needed.
cd spark_env3
# We must cd into the directory before we zip it for Spark to find the resources. 
zip -r ../spark_env3_inside.zip *
# Be sure to cd back out after building the zip file. 
cd ..

PYSPARK_PYTHON=./spark_env3/bin/python3 spark-submit \ 
  --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./spark_env3/bin/python3 \
  --master yarn-cluster \
  --archives /home/hadoop/spark_env3_inside.zip#spark_env3 \
  test_spark.py

,如下所述:在yarn上使用spark-submit的– archives选项上载zip文件

我正在运行的测试脚本的来源来自这篇文章,该文章讨论了使用conda而不是virtualenv来运行pyspark作业:http ://quasiben.github.io/blog/2016/4/15/conda-spark/

并包含test_spark.py脚本的以下代码

# test_spark.py
import os
import sys
from pyspark import SparkContext
from pyspark import SparkConf

conf = SparkConf()
conf.setAppName("get-hosts")

sc = SparkContext(conf=conf)

def noop(x):
    import socket
    import sys
    return socket.gethostname() + ' '.join(sys.path) + ' '.join(os.environ)

rdd = sc.parallelize(range(1000), 100)
hosts = rdd.map(noop).distinct().collect()
print(hosts)

如果您想要一些有关使用virtualenv执行pyspark作业的背景信息(如@Mariusz所述),此博客中有一个有用的示例:https ://henning.kropponline.de/2016/09/17/running-pyspark-with-virtualenv /(尽管它不能解释我在提供的其他链接中阐明的一些细微差别)。

这里提供的答案中还有一个示例:未在PySpark中加载的Elephas:没有名为elephas.spark_model的模块

这里还有另一个示例:https ://community.hortonworks.com/articles/104947/using-virtualenv-with- pyspark.html

python 2022/1/1 18:50:43 有532人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶