首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spark找不到Python模块

Spark找不到Python模块
EN

Stack Overflow用户
提问于 2018-10-17 03:19:20
回答 3查看 2K关注 0票数 0

我正在尝试使用spark-submit命令在本地运行以下Python脚本:

代码语言:javascript
复制
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")

使用的命令(在项目目录中):

代码语言:javascript
复制
spark-submit rdd/AirportsInUsaSolution.py

我一直收到这个错误:

导入回溯(最近一次调用):文件"/home/gustavo/Documentos/TCC/python_spark_yt/python-spark-tutorial/rdd/AirportsInUsaSolution.py",第4行,来自commons.Utils导入实用程序ImportError:没有名为commons.Utils的模块

即使有一个带有Utils类的commons.Utils。

它似乎只接受来自Spark的imports,因为当我试图从我的项目导入任何其他类或文件时,这个错误仍然存在。

EN

回答 3

Stack Overflow用户

发布于 2018-10-17 03:32:48

代码语言:javascript
复制
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的那些。您可以压缩所需的文件(Util、numpy)等,并在spark-submit中指定参数--py-files

代码语言:javascript
复制
spark-submit  --py-files rdd/file.zip rdd/AirportsInUsaSolution.py 
票数 3
EN

Stack Overflow用户

发布于 2019-08-09 07:28:59

要让python将目录视为包,您需要在该目录中创建__init__.py__init__.py文件不需要包含任何内容。

在这种情况下,一旦您在commons目录中创建了__init__.py,您就可以访问该包。

票数 0
EN

Stack Overflow用户

发布于 2019-11-05 21:10:03

创建一个名为:Utils.py的python脚本,它将包含:

代码语言:javascript
复制
import re

class Utils():

    COMMA_DELIMITER = re.compile(''',(?=(?:[^"]*"[^"]*")*[^"]*$)''')

将此Utils.py python脚本放在commons文件夹中,并将此文件夹放在您的工作目录中(键入pwd即可了解它)。然后,您可以导入Utils类:

代码语言:javascript
复制
from commons.Utils import Utils

希望能对你有所帮助。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52842608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档