python - Pyspark 导入 .py 文件不起作用

标签 python apache-spark python-import pyspark

我的目标是将自定义 .py 文件导入我的 spark 应用程序并调用该文件中包含的一些函数

这是我尝试过的:

我有一个名为 Test.py 的测试文件,如下所示:

def func():
    print "Import is working"

在我的 Spark 应用程序中,我执行以下操作(如文档中所述):

sc = SparkContext(conf=conf, pyFiles=['/[AbsolutePathTo]/Test.py'])

我也试过这个(在创建 Spark 上下文之后):

sc.addFile("/[AbsolutePathTo]/Test.py")

我什至在提交我的 spark 申请时尝试了以下方法:

./bin/spark-submit --packages com.datastax.spark:spark-cassandra-connector_2.10:1.5.0-M2 --py-files /[AbsolutePath]/Test.py ../Main/Code/app.py

但是,我总是得到一个名称错误:

NameError: name 'func' is not defined

当我在我的 app.py 中调用 func() 时。 (如果我尝试调用 Test.func(),'Test' 会出现同样的错误)

最后,al 还尝试使用与上述相同的命令将文件导入 pyspark shell 中:

sc.addFile("/[AbsolutePathTo]/Test.py")

奇怪的是,我在导入时没有收到错误,但我仍然无法在不收到错误的情况下调用 func()。另外,不确定这是否重要,但我在一台机器上本地使用 spark。

我确实尝试了所有我能想到的方法,但仍然无法正常工作。可能我错过了一些非常简单的东西。任何帮助将不胜感激。

最佳答案

好吧,其实我的问题比较蠢。完成后:

sc.addFile("/[AbsolutePathTo]/Test.py")

我仍然需要导入 Test.py 文件,就像导入常规 python 文件一样:

import Test

然后我可以打电话

Test.func()

并且有效。我认为“导入测试”不是必需的,因为我将文件添加到 spark 上下文中,但显然没有相同的效果。 感谢 mark91 为我指明了正确的方向。

2017 年 10 月 28 日更新:

如评论中所问,这里有关于 app.py 的更多详细信息

from pyspark import SparkContext
from pyspark.conf import SparkConf

conf = SparkConf()
conf.setMaster("local[4]")
conf.setAppName("Spark Stream")
sc = SparkContext(conf=conf)
sc.addFile("Test.py")

import Test

Test.func()

关于python - Pyspark 导入 .py 文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34398590/

相关文章:

python - 使用 'import module' 还是 'from module import' ?

python - Python 到底什么时候导入?

python - 读取stm发送的串行数据

python RESTful 网络服务框架 : roll my own or is there a recommended library?

Python将日期时间小时设置为特定时间

python - 在 Paramiko 中运行交互式命令

apache-spark - Cassandra 错误消息 : Not marking nodes down due to local pause. 为什么?

apache-spark - Spark 谓词下推未按预期工作

Python 相当于窗口的 Spark rangeBetween?

python - 在 django 根目录之外导入模块