Как прочитать zip, отправленный —pyfiles из приложения PySpark

#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 файл:

  1. При загрузке zip-файла и отправке через --py-files , пакет остается внутри zip-файла без извлечения (например /private/var/folders/81/c3fgx2qx6nq3lh2v983cdcd80000gn/T/spark-043999a0-c7fb-409c-a95d-4b8a902e55f0/userFiles-c3301b1a-b47e-4411-a2e9-ef0d8c2dc347/a.zip )
  2. Потому что, если (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'