我正在 pyspark 上开发一些基本的 Spark 作业。 Spark 作业利用通用 Python 进行实用程序和数据更新插入。为了允许本地测试,我将 python 模块打包为 zip 包。 zip包是通过requirements.txt文件构建的,如下所示
buildzip:
poetry export -f requirements.txt --without-hashes -o requirements.txt
poetry run pip install --use-feature=in-tree-build . -r requirements.txt -t package_tmp
cd package_tmp && find . -name "*.pyc" -delete && zip -r "test_package" . && cd .. && cp package_tmp/test_package.zip dist/ && rm -r package_tmp
输出的zip包
test_package.zip
在本地spark-submit中使用如下
spark-submit --py-files dist/test_package.zip /<path>/job.py
除了我需要使用
psycopg2-binary = "^2.9.2"
访问数据库的地方之外,上述过程工作正常。我收到错误了。
ModuleNotFoundError: No module named 'psycopg2._psycopg'
据我了解,此错误是由于将本机模块打包在 zip 文件夹中造成的。不幸的是,本地的
spark-submit
不接受whl
套餐。
如何将这些本机模块打包在 zip 下,以便在本地测试我的 Spark 作业?
在文档中找到它 https://spark.apache.org/docs/latest/api/python/user_guide/python_packaging.html
您必须使用 --archive 选项来添加使用 venv-pack 打包的环境。经过几个小时的搜索后,这对我有用