Pyspark导入.py文件无法正常工作

时间:2015-12-21 14:58:56

标签: 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")

在提交我的火花应用程序时,我甚至尝试了以下内容:

./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'相同的错误)

最后,我还尝试使用与上面相同的命令在pyspark shell中导入文件:

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

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

我真的尝试了我能想到的一切,但仍然无法让它发挥作用。可能我错过了一些非常简单的事情。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:13)

好吧,实际上我的问题是相当愚蠢的。做完之后:

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

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

import Test

然后我可以打电话

Test.func()

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

更新28.10.2017:

如评论中所述,此处有关于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()