#python #apache-spark #pyspark #path #operating-system
Вопрос:
У меня следующая структура папок. Я застегнул source
папку и запустил spark-submit
с source.zip
помощью as --py-files
. Моя проблема в том, как мне прочитать config.hcl
файл из приложения PySpark? Я пытался SparkFiles.getRootDirectory() '/source/config.hcl'
, но это не сработало. Ошибка гласит, что такого файла или директории нет. Большое спасибо за вашу помощь. Я пытаюсь читать config.hcl
с app.py
. Как мне передать его в почтовый ящик? Или как мне сначала распаковать его?
source
| config.hcl
app.py.
Ответ №1:
Есть две основные причины, по которым вы не смогли прочитать config.hcl
файл:
- При загрузке zip-файла и отправке через
--py-files
, пакет остается внутри zip-файла без извлечения (например/private/var/folders/81/c3fgx2qx6nq3lh2v983cdcd80000gn/T/spark-043999a0-c7fb-409c-a95d-4b8a902e55f0/userFiles-c3301b1a-b47e-4411-a2e9-ef0d8c2dc347/a.zip
) - Потому что, если (1) способ чтения
config.hcl
немного отличается, вам нужно будет вместо этого читать по ZIP-файлу
Я создал тестовый файл a.zip
со следующей структурой
├── a
│ ├── __init__.py
│ ├── a.py
│ └── a.txt
# __init__.py
from .a import *
# a.py
from os import path
from zipfile import ZipFile
def test():
zip = ZipFile(path.dirname(path.dirname(path.abspath(__file__))))
with zip.open('a/a.txt') as f:
print(f.readlines())
# a.txt
'Hello World'
# spark-submit --py-files a.zip ...
import a
a.test()
# 'Hello World'