Пакет python со статической зависимостью файла не может прочитать статический файл при использовании в Pyspark - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь решить проблему с пакетами Python PySpark.Я разработал пакет python, который имеет следующую структуру:

sample_package/
  |-config/
       |-sample.ini
  |-main.py
  |-__init__.py

Внутри моего main.py у меня есть фрагмент кода, который читает файл конфигурации из каталога config/ следующим образом

import ConfigParser, os
def sample_func():
    config = ConfigParser.ConfigParser()
    configfile = os.path.join(os.path.dirname(__file__), 'config', 'sample.ini')
    config.read(configfile)
    return config.sections()

Я создал zip-файл из вышеуказанного пакета как sample_package.zip и включил zip как зависимость pyspark

addPyFile(path/to/zip/file)

В моей работе pyspark при импорте sample_packageимпорт работает нормально, и я могу вызвать sample_func внутри main, но мой пакет python не может прочитать файл sample.ini.Когда выполняется внутри простой программы на Python, она работает нормально, но не в работе pyspark.Есть ли какие-либо манипуляции с путями в среде pyspark при доступе к статическим файлам?Как я могу заставить мой пакет python правильно прочитать файл конфигурации?

1 Ответ

0 голосов
/ 25 июня 2018

Я разобрался с ответом сам. Это скорее проблема упаковки Python, нежели проблема среды pyspark. Похоже, мне пришлось использовать модуль pkgutil для ссылки на мои статические ресурсы, который изменяет мою функцию, как показано ниже

import ConfigParser, os, pkgutil, StringIO
def sample_func():
    config = ConfigParser.ConfigParser()
    configfile = pkgutil.get_data('sample_package', 'config/sample.ini')
    cf_buf = StringIO.StringIO(configfile)
    config.readfp(cf_buf)
    return config.sections()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...