python - 在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 上下文一起添加。它也没有用。
试图了解它为什么不起作用以及如何解决这个问题。
解决方案
选项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__.py
,test1.py
并且test2.py
在myfiles.zip
您现在可以将它们用作
from myfiles.Test1 import test_function
from myfiles.Test2 import new_function
推荐阅读
- java - 我怎样才能从父类到达子类?(在Java中)
- git - 如何使用 Git LFS 跟踪存储库的任何子目录中的任何(任意)文件 - 但不跟踪其根目录中的任何文件?
- python - tkinter 在 Windows 10 上的 CMD 中运行
- c++ - C ++如何正确将此代码实现到堆中
- selenium - Jenkins:ChromeDriver 从 shell 脚本更新 PATH 并使用新版本
- swift - Swift/FireStore - 在固定路径添加和更新子集合
- r - 如何计算 tibble 或数据框中的值以生成新的输出表?
- r - R:删除“。” 和数据框中年份列中的 0
- python - 一个类的每个python对象在创建后都具有相同的属性值
- python - 有没有更简单的方法来解决这个问题?