在pyspark中导入多个py文件

问题描述

我在hdfs中具有以下文件夹结构。

/ home / myid -main.py -test1.py -test2.py

在main.py中,我试图同时导入test1和test2。

from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
sc=SparkContext('local')
spark= SparkSession(sc)
from test1 import test_function
from test2 import new_function

test_function()
new_function()

所有3个文件都在同一文件夹中。

Test1.py

def test_function():
    print("test1")

Test2.py

def new_function():
    print("test2")

当我尝试使用执行main.py时 spark-submit main.py,它说不能导入new_function。

它能够导入test1.py但不能导入test2.py

在导入之前,我还尝试过使用sc.addPyFile。没用。

通过提供--py-files和spark提交进行了尝试,但同样没有效果

尝试压缩test1和test2并将其与spark上下文一起添加。也不行。

试图了解为什么它不起作用以及如何解决这个问题。

解决方法

选项1

尝试使用spark-submit给出这些语法,确保您使用的是逗号

--py-files test1.py,test2.py

选项2:

此外,您可以zip将它们包括进来

首先将它们放置在实例myfiles/的目录中(另外,在此目录的根目录下创建空的__init__.py文件,例如myfiles / __ init__.py)

从该目录之外,对其进行压缩(例如myfiles.zip

现在包含具有sc.addPyFile功能的zip

sc.addPyFile("myfiles.zip")

考虑到您在__init__.py中拥有test1.pytest2.pymyfiles.zip

您现在可以将它们用作

from myfiles.Test1 import test_function
from myfiles.Test2 import new_function