首页 > 解决方案 > 在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 个文件都在同一个文件夹中。

测试1.py

def test_function():
    print("test1")

测试2.py

def new_function():
    print("test2")

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

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

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

通过提供 --py-files 和 spark submit 进行尝试,但它也不起作用。

尝试压缩 test1 和 test2 并将其与 spark 上下文一起添加。它也没有用。

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

标签: pythonapache-sparkhdfs

解决方案


选项1

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

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

选项 2:

此外,您可以zip将它们包括在内

首先将它们放在一个目录中myfiles/(另外__init__.py在该目录的根级别创建空文件,例如 myfiles/__init__.py )

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

现在将这个 zip 包含在sc.addPyFile函数中

sc.addPyFile("myfiles.zip")

考虑到你有__init__.pytest1.py并且test2.pymyfiles.zip

您现在可以将它们用作

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

推荐阅读