PySpark: как определить путь к файлу ресурса, находящемуся внутри zip-файла зависимостей - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть mapPartitions на СДР, и в каждом разделе должен быть открыт файл ресурса.Этот модуль, который содержит метод, вызванный mapPartitions, и файл ресурсов передаются каждому исполнителю с использованием аргумента --py-files в виде zip-файла.

Чтобы было понятно:

rdd = rdd.mapPartitions(work_doing_method)

def work_doing_method(rows):
    for row in rows:
        resource_file_path = os.path.join(os.path.dirname(__file__), "resource.json")
        with open(resource_file_path) as f:
            resource = json.loads(f.read())
            ...

Когда я делаю это после передачи zip-файла, который включает все это с использованием параметра --py-file, в команду spark-submit,

Я получаю IOError: [Errno 20] Not a directory:/full/path/to/the/file/within/zip/file

Я не понимаюкак Spark использует zip-файл для чтения зависимостей.Утилита os.path.dirname возвращает полный путь, включая zip-файл, например./spark/dir/my_dependency_file.zip/path/to/the/resource/file.Я считаю, что это должно быть проблемой.Я пробовал много комбинаций, чтобы определить путь к файлу.Любая помощь приветствуется.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Мы получаем путь к файлу ресурса в файле egg / zip (внутри рабочей директории исполнителя), когда ищем абсолютный путь.В итоге я использовал модуль zipfile в Python и фактически открыл его, как здесь .

0 голосов
/ 13 ноября 2018

Я думаю, что когда вы добавляете файл в задание Spark, он будет скопирован в рабочий каталог каждого исполнителя.Я использовал SparkFiles API для получения абсолютных путей к файлам на исполнителях.

Вы также можете использовать флаг --archives для передачи в произвольные архивы данных, такие как zip-файлы. В чем разница между --archives, --files, py-файлами в аргументах задания pyspark

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...