Я использую действия github для создания файлов .zip pyspark, используя следующий фрагмент yaml
name: Build Artifacts
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9"]
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Make artifact directory
run: mkdir -p ./dist
- uses: actions/checkout@v2
- name: Create Zip File
uses: montudor/[email protected]
with:
args: sh -c "cd data_compaction && zip -r ../src.zip src/"
- name: Push zip file to S3
uses: qoqa/[email protected]
env:
AWS_S3_BUCKET: 'dev-bucket'
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: 'us-east-1'
AWS_S3_PATH: '/artifacts/src.zip'
FILE: 'src.zip'
- name: Push main file to S3
uses: qoqa/[email protected]
env:
AWS_S3_BUCKET: 'dev-bucket'
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: 'us-east-1'
AWS_S3_PATH: '/artifacts/main.py'
FILE: './data_compaction/main.py'
ZIP-файл создается и успешно отправляется на S3. Но когда я пытаюсь импортировать модули в zip, я получаю ошибку ModuleNotFound. Я запускаю spark-submit --py-files src.zip main.py
Однако, когда я архивирую файл на своем локальном компьютере с помощью Makefile и запускаю отправку spark, он работает. Makefile выглядит так:
build:
rm -f -r ./dist
mkdir ./dist
cp main.py ./dist
cd ./src && zip -r ../dist/src.zip .
Каталог моего проекта выглядит следующим образом
── data_compaction
├── Makefile
├── main.py
└── src
├── jobs
│ ├── __init__.py
│ ├── xyz.py
│ └── abc.py
└── utilities
├── __init__.py
└── spark_foundation.py
И мой main.py имеет этот фрагмент для импорта модулей:
if os.path.exists('src.zip'):
sys.path.insert(0, 'src.zip')
else:
sys.path.insert(0, './src')
from utilities.spark_foundation import spark_session
from jobs.xyz import func1
from jobs.abc import func2
PS: я новичок в действиях github
@FelixKleineBösing да, есть загрузочный скрипт, который копирует src.zip и main.py на мастер. Все это работает нормально. Я даже попытался загрузить артефакты с s3 на свой локальный компьютер и запустил отправку искры, но ошибка «модуль не найден» все еще существует. Я думаю, что проблема связана с действием zip github, и по какой-то странной причине я не могу этого понять. Также я использую ЭМИ
Кроме того, я запускаю отправку искры на главном узле. Он работает, как и ожидалось, когда я копирую локально созданные src.zip и main.py на мастер и запускаю его. Проблема в том, что когда я пытаюсь запустить zip-файл, созданный действием github
Ах хорошо. Спасибо за ответ :) Вы тоже распаковали src.zip от s3? В makefile вы переходите в каталог src и сжимаете все, что находится под ним, а в ci yml вы переходите в data_compaction и рекурсивно сжимаете каталог src, который включает в себя каталог src. Он должен снова работать, когда вы измените команду CI на cd data_compation/src && zip -r ../src.zip .






Вы также распаковали src.zip из s3? В makefile вы переходите в каталог src и сжимаете все, что находится под ним, а в ci yml вы переходите в data_compaction и рекурсивно сжимаете каталог src, который включает в себя каталог src. Он должен снова работать, когда вы измените команду CI на:
- name: Create Zip File
uses: montudor/[email protected]
with:
args: sh -c "cd data_compaction/src && zip -r ../src.zip ."
Это работает. Мне пришлось обновить параметр FILE до ./data_compaction/src.zip
Какой сервис вы используете для искры на aws? вы куда-то переносите zip-файл на кластер? В искровом сообщении вы ссылаетесь на локальный файл src.zip?