У меня есть проект python, папка которого имеет структуру
main_directory - lib - lib.py
- run - script.py
script.py
равно
from lib.lib import add_two
spark = SparkSession \
.builder \
.master('yarn') \
.appName('script') \
.getOrCreate()
print(add_two(1,2))
, а lib.py
равно
def add_two(x,y):
return x+y
Я хочу запустить в качестве задания Datapro c в GCP. Я проверил онлайн, но я не очень хорошо понял, как это сделать. Я пытаюсь запустить скрипт с
gcloud dataproc jobs submit pyspark --cluster=$CLUSTER_NAME --region=$REGION \
run/script.py
Но я получаю следующее сообщение об ошибке:
from lib.lib import add_two
ModuleNotFoundError: No module named 'lib.lib'
Не могли бы вы помочь мне с тем, как я должен выполнить запуск работы в Datapro c? Единственный способ сделать это - удалить абсолютный путь, изменив это значение на script.py
:
from lib import add_two
и запустить задание как
gcloud dataproc jobs submit pyspark --cluster=$CLUSTER_NAME --region=$REGION \
--files /lib/lib.py \
/run/script.py
Однако Я хотел бы избежать утомительного процесса, чтобы каждый раз перечислять файлы вручную.
По предложению @Igor, чтобы упаковать в zip-файл, я обнаружил, что
zip -j --update -r libpack.zip /projectfolder/* && spark-submit --py-files libpack.zip /projectfolder/run/script.py
работает. Однако это помещает все файлы в одну папку root в libpack.zip, поэтому, если в подпапках есть файлы с одинаковыми именами, это не будет работать.
Есть предложения?