我是 Python 新手,并嘗試在 AWS EMR 上的 spark 上啟動我的 pyspark 專案。該專案部署在 AWS S3 上并有幾個 python 檔案,如下所示:
/folder1
- main.py
/utils
- utils1.py
- utils2.py
我使用以下命令:
spark-submit --py-files s3://bucket/utils s3://bucket/folder1/main.py
但我收到錯誤:
Traceback (most recent call last):
File "/mnt/tmp/spark-1e38eb59-3ddd-4deb-8529-eace7465b6ce/main.py", line 15, in <module>
from utils.utils1 import foo
ModuleNotFoundError: No module named 'utils'
我必須在我的命令中修復什么?我知道我可以將我的專案打包到 zip 檔案中,但現在我需要不打包就進行打包,但是如果您告訴我這兩種解決方案,我將不勝感激。
更新:
EMR 集群的控制器日志顯示,啟動命令如下所示:
hadoop jar /var/lib/aws/emr/step-runner/hadoop-jars/command-runner.jar spark-submit --packages org.apache.spark:spark-avro_2.12:3.1.1 --driver-memory 100G --conf spark.driver.maxResultSize=100G --conf spark.hadoop.fs.s3.maxRetries=20 --conf spark.sql.sources.partitionOverwriteMode=dynamic --py-files s3://bucket/dir1/dir2/utils.zip --master yarn s3://bucket/dir1/dir2/dir3/main.py --args
但現在我有以下錯誤:
java.io.FileNotFoundException: File file:/mnt/var/lib/hadoop/steps/cluster-id/dir1/dir2/utils.zip does not exist
怎么了?
uj5u.com熱心網友回復:
雖然不推薦(請參閱完整答案以獲得更好的選擇),但如果您不想壓縮檔案。utils您可以在實際檔案之前提供帶有逗號分隔語法的 py-files 的單個 utils-* 檔案,而不是提供檔案夾
'Args': ['spark-submit',
'--py-files',
'{your_s3_path_here}/utils/utils1.py,{your_s3_path_here}/utils/utils1.py',
'main.py']
}
最好壓縮 utils 檔案夾
您可以zip像這樣使用并包含
為此,請__init__.py在根級別創建空檔案,utils例如 utils/__init__.py )
從這個目錄之外,制作一個 zip 檔案(例如utils.zip)
對于提交,您可以將此 zip 添加為
'Args': ['spark-submit',
'--py-files',
'{your_s3_path_here}/utils.zip',
'main.py'
}
考慮到你有__init__.py, utils1.py, utils2.pyinutils.zip
注意:您可能還需要sc.addPyFile("utils.zip")在以下匯入之前將此 zip 添加到 sc
您現在可以將它們用作
from utils.utils1 import *
from utils.utils2 import *
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311442.html
標籤:Python 亚马逊网络服务 阿帕奇火花 火花 亚马逊-emr
上一篇:為什么合并會導致處理的節點太少?
