Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyspark导入用户定义的模块或.py文件_Python_Apache Spark_Pyspark_Python Import_Python Module - Fatal编程技术网

Python pyspark导入用户定义的模块或.py文件

Python pyspark导入用户定义的模块或.py文件,python,apache-spark,pyspark,python-import,python-module,Python,Apache Spark,Pyspark,Python Import,Python Module,我构建了一个应用程序,我想将它导入我的pyspark应用程序 我的包目录结构是: wesam/ |-- data.py `-- __init__.py pyspark脚本顶部的一个简单的import-wesam会导致ImportError:没有名为wesam的模块。我还尝试将其压缩并与我的代码一起发送到--py filesas,但没有成功 ./bin/spark-submit --py-files wesam.zip mycode.py 我还按照的建议以编程方式添加了该文件,但得到了相同的I

我构建了一个应用程序,我想将它导入我的pyspark应用程序

我的包目录结构是:

wesam/
|-- data.py
`-- __init__.py
pyspark脚本顶部的一个简单的
import-wesam
会导致
ImportError:没有名为wesam的模块。我还尝试将其压缩并与我的代码一起发送到
--py files
as,但没有成功

./bin/spark-submit --py-files wesam.zip mycode.py
我还按照的建议以编程方式添加了该文件,但得到了相同的
ImportError:No module named wesam
error

.sc.addPyFile("wesam.zip")

我在这里遗漏了什么?

事实证明,由于我在中提交了我的应用程序,因此运行
spark submit
命令的机器将运行驱动程序并需要访问模块文件

我通过将以下行添加到我的
.bashrc
文件(或在提交我的作业之前执行它),将我的模块添加到我提交作业的节点上的
PYTHONPATH
环境变量中

这就解决了问题。由于路径位于驱动程序节点上,因此我不必使用
--py files
或使用
sc.addPyFile()
来压缩和发送模块

解决任何pyspark模块导入错误问题的关键是了解驱动程序或工作节点(或两者)是否需要模块文件

重要 如果工作节点需要您的模块文件,那么您需要将其作为zip归档文件与
--py files
一起传递,并且此参数必须位于.py file参数之前。例如,请注意这些示例中的参数顺序:

这是正确的:

./bin/spark-submit --py-files wesam.zip mycode.py
这是不正确的:

./bin/spark-submit mycode.py --py-files wesam.zip

mycode.pywesam.py放在同一路径位置,然后重试

sc.addPyFile(“wesam.py”)


这可能有用

虽然这可能会起作用,但您实际上是通过(可能是)全球范围内的$HOME/.bashrc来区分您的env。真的没有办法动态设置工作模块的PYTHONPATH吗?您希望这样做的原因是,您正在从ipython REPL进行交互,并且希望在PYTHONPATH(想想python setup.py开发模式)中提供依赖于NFS上的模块的并行作业。@Wesam回答得很好!您提到“解决任何pyspark模块导入错误问题的关键是了解驱动程序或工作节点(或两者)是否需要模块文件。”——您能推荐一种了解这一点的好方法吗?@Wesam nee您建议在pyspark中分解应用程序。假设我已经将我的大代码分解为三个pyscript。运行这些脚本的最佳方式是什么?使用三个shell和spark submit将它们作为不同的应用程序来执行,或者在一个spark shell中一起运行?这对我来说很好,谢谢。我还能够为单个模块指定s3位置。清晰且有用!谢谢!
./bin/spark-submit mycode.py --py-files wesam.zip