Я пытаюсь заархивировать свое приложение в моем тестовом файле, чтобы инициировать отправку в кластере EMR следующим образом:
Структура папок модулей:
app
--- module1
------ test.py
------ test2.py
--- module2
------ file1.py
------ file2.py
Функция Zip, которую я вызываю из моих тестов
import zipfile
import os
def zip_deps():
# make zip
module1_path = '../module1'
module2_path = '../module2'
try:
with zipfile.ZipFile('deps.zip', 'w', zipfile.ZIP_DEFLATED) as zipf:
info = zipfile.ZipInfo(module1_path +'/')
zipf.writestr(info, '')
for root, dirs, files in os.walk(module1_path):
for d in dirs:
info = zipfile.ZipInfo(os.path.join(root, d)+'/')
zipf.writestr(info, '')
for file in files:
zipf.write(os.path.join(root, file),os.path.relpath(os.path.join(root, file)))
info = zipfile.ZipInfo(module2_path +'/')
zipf.writestr(info, '')
for root, dirs, files in os.walk(module2_path):
for d in dirs:
info = zipfile.ZipInfo(os.path.join(root, d)+'/')
zipf.writestr(info, '')
for file in files:
zipf.write(os.path.join(root, file),os.path.relpath(os.path.join(root, file)))
except:
print('Unexpected error occurred while creating file deps.zip')
zipf.close()
Файл deps.zip создан правильно, насколько я вижу, он архивирует все нужные мне файлы, и каждая папка модуля находится на базовом уровне zip.
На самом деле точный почтовый индекс создан с использованием:
zip -r deps.zip module1 module2
Это та же самая структура, и ЭТО работает, когда я подхожу к ней с
spark-submit --py-files deps.zip driver.py
Ошибка от EMR:
Traceback (most recent call last):
File "driver.py", line 6, in <module>
from module1.test import test_function
ModuleNotFoundError: No module named 'module1'
FWIW Я также попытался заархивировать, используя подпроцесс со следующими командами, и я получил ту же ошибку на своем EMR в spark
os.system("zip -r9 deps.zip ../module1")
os.system("zip -r9 deps.zip ../module2")
Я не знаю, почему zip-файл, созданный в python, отличается от внешнего вида python, но последние несколько дней я потратил на это, и, надеюсь, кто-то может помочь!
Спасибо !!