我正在尝试使用spark-submit命令在本地运行以下Python脚本:
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
我不断收到此错误:
回溯(最近通话最近):文件 “ /home/gustavo/Documentos/TCC/python_spark_yt/python-spark-tutorial/rdd/AirportsInUsaSolution.py”, 第4行 从commons.Utils import Utils ImportError:没有名为commons.Utils的模块
即使有一个共同点。Utils带有一个Utils类。
似乎唯一接受的imports
是来自Spark的npm module
,因为当我尝试从项目中导入任何其他类或文件时,此错误仍然存在。
答案 0 :(得分:2)
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")
是的,它仅接受来自Spark的内容。您可以压缩所需文件(Utils,numpy)等,并在spark-submit中指定参数--py-files
。
spark-submit --py-files rdd/file.zip rdd/AirportsInUsaSolution.py
答案 1 :(得分:0)
要让python将目录视为软件包,您需要在该目录中创建 __ init __。py 。 __ init __。py 文件不需要包含任何内容。
在这种情况下,一旦您在commons目录中创建 __ init __。py ,您就可以访问该软件包。
答案 2 :(得分:0)
创建一个名为Utils.py
的python脚本,其中将包含:
import re
class Utils():
COMMA_DELIMITER = re.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''')
将此Utils.py
python脚本放在commons
文件夹中,然后将此文件夹放在您的工作目录中(键入pwd
即可知道)。然后,您可以导入Utils
类:
from commons.Utils import Utils
希望它会对您有所帮助。