Действия Github: сборка пакета Pyspark

Я использую действия 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

Какой сервис вы используете для искры на aws? вы куда-то переносите zip-файл на кластер? В искровом сообщении вы ссылаетесь на локальный файл src.zip?

Felix Kleine Bösing 14.09.2022 17:36

@FelixKleineBösing да, есть загрузочный скрипт, который копирует src.zip и main.py на мастер. Все это работает нормально. Я даже попытался загрузить артефакты с s3 на свой локальный компьютер и запустил отправку искры, но ошибка «модуль не найден» все еще существует. Я думаю, что проблема связана с действием zip github, и по какой-то странной причине я не могу этого понять. Также я использую ЭМИ

Rohit Anil 14.09.2022 23:45

Кроме того, я запускаю отправку искры на главном узле. Он работает, как и ожидалось, когда я копирую локально созданные src.zip и main.py на мастер и запускаю его. Проблема в том, что когда я пытаюсь запустить zip-файл, созданный действием github

Rohit Anil 14.09.2022 23:49

Ах хорошо. Спасибо за ответ :) Вы тоже распаковали src.zip от s3? В makefile вы переходите в каталог src и сжимаете все, что находится под ним, а в ci yml вы переходите в data_compaction и рекурсивно сжимаете каталог src, который включает в себя каталог src. Он должен снова работать, когда вы измените команду CI на cd data_compation/src && zip -r ../src.zip .

Felix Kleine Bösing 16.09.2022 19:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы также распаковали 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

Rohit Anil 26.09.2022 11:14

Другие вопросы по теме