簡體   English   中英

spark-submit python 帶有 venv 的包無法運行程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM