[英]spark-submit - Cannot import packages from environment submitted as --archive
[英]spark-submit python packages with venv cannot run program
我按照這篇文章封裝了fuzzy-c-means 庫以在火花集群上運行,我在docker 上使用bitnami/spark 圖像。 我已經使用 python 圖像構建了一個帶有 python 3.7 的 venv 並安裝了fuzzy-c-means 庫。 然后我使用 venv-pack 將 venv 壓縮到 environment.tar.gz 文件中。
我有一個 app.py 文件:
from pyspark.sql import SparkSession
def main(spark):
import fcmeans
print('-')
if __name__ == "__main__":
print('log')
spark = (
SparkSession.builder
.getOrCreate()
)
main(spark)
因此,當我運行我的 spark-submit 代碼時,出現錯誤: Exception in thread "main" java.io.IOException: Cannot run program "./environment/bin/python": error=2, No such file or directory
。
spark-summit 代碼:
PYSPARK_PYTHON=./environment/bin/python spark-submit --archives ./environment.tar.gz#environment ./app.py
如果我刪除語句PYSPARK_PYTHON
,我可以使用 .tar.gz 文件運行 app.py,但我的 app.py 中將沒有名為“fcmeans”的模塊用於導入。
問題是,當運行 --archives./environment.tar.gz#environment 時,它解壓縮 /tmp/spark-uuid-code/userFiles-uuid-code/environment/ 中的 tar.gz 文件,當我設置 PYSPARK_PYTHON它無法識別文件的路徑有一個有效的文件,但它認為火花應該管理這個。
我應該做什么的任何提示?
我已經設法通過在 EMR 集群中創建 virtualenv 來使其工作,然后使用 venv-pack 將 .tar.gz 文件導出到 S3 存儲桶。 這篇文章有幫助:gist.github 。
在 EMR shell 內部:
# Create and activate our virtual environment
virtualenv -p python3 venv-datapeeps
source ./venv-datapeeps/bin/activate
# Upgrade pip and install a couple libraries
pip3 install --upgrade pip
pip3 install fuzzy-c-means boto3 venv-pack
# Package the environment and upload
venv-pack -o pyspark_venv.tar.gz
aws s3 cp pyspark_venv.tar.gz s3://<BUCKET>/artifacts/pyspark/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.