Spark не может найти модуль Python - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь запустить следующий скрипт Python локально, используя команду spark-submit:

import sys
sys.path.insert(0, '.')
from pyspark import SparkContext, SparkConf
from commons.Utils import Utils

def splitComma(line):
    splits = Utils.COMMA_DELIMITER.split(line)
    return "{}, {}".format(splits[1], splits[2])

if __name__ == "__main__":
    conf = SparkConf().setAppName("airports").setMaster("local[2]")
    sc = SparkContext(conf = conf)

    airports = sc.textFile("in/airports.text")
    airportsInUSA = airports\
    .filter(lambda line : Utils.COMMA_DELIMITER.split(line)[3] == "\"United States\"")

    airportsNameAndCityNames = airportsInUSA.map(splitComma)
    airportsNameAndCityNames.saveAsTextFile("out/airports_in_usa.text")

Используемая команда (находясь в каталоге проекта):

spark-submit rdd/AirportsInUsaSolution.py

Я получаю эту ошибку:

Traceback (последний вызов был последним): файл "/home/gustavo/Documentos/TCC/python_spark_yt/python-spark-tutorial/rdd/AirportsInUsaSolution.py", строка4, из commons.Utils import Utils ImportError: Нет модуля с именем commons.Utils

Даже при том, что существует commons.Utils с классом Utils.

Кажется, что единственные imports, которые он принимает, - это те, что получены от Spark, потому что эта ошибка сохраняется, когда я пытаюсь импортировать любой другой класс или файл из моего проекта.

Ответы [ 2 ]

0 голосов
/ 09 августа 2019

чтобы python рассматривал каталог как пакет, вам нужно создать __ init __. Py в этом каталоге.Файл __ init __. Py не должен содержать ничего.

В этом случае, когда вы создадите __ init __. Py в каталоге commons, вы сможете получить к нему доступ.этот пакет.

0 голосов
/ 16 октября 2018
from pyspark import SparkContext, SparkConf

def splitComma(line):
    splits = Utils.COMMA_DELIMITER.split(line)
    return "{}, {}".format(splits[1], splits[2])

if __name__ == "__main__":
    conf = SparkConf().setAppName("airports").setMaster("local[2]")
    sc = SparkContext(conf = conf)

    sc.addPyFile('.../pathto commons.zip')
    from commons import Utils

    airports = sc.textFile("in/airports.text")
    airportsInUSA = airports\
    .filter(lambda line : Utils.COMMA_DELIMITER.split(line)[3] == "\"United States\"")

    airportsNameAndCityNames = airportsInUSA.map(splitComma)
    airportsNameAndCityNames.saveAsTextFile("out/airports_in_usa.text")

Да, он принимает только искры.Вы можете сжать необходимые файлы (Utils, Numpy) и т. Д. И указать параметр --py-files в spark-submit.

spark-submit  --py-files rdd/file.zip rdd/AirportsInUsaSolution.py 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...