python导入自定义包
在python中,py文件是一个模块,可以import导入。
如果想导入一系列功能的多个py文件,可以把这些文件放入一个包里,这个包里需要一个__init__.py文件。init.py的作用就是把文件夹变成一个python模块。
情况1:当前目录下的py文件
比如当前目录下有个mmm.py文件,里面写了fun1函数和fun2函数,你可以
import mmm
mmm.fun1()
mmm.fun2()
或者
from mmm import fun1,fun2
fun1()
fun2()
情况2:当前目录下的包
比如当前目录下有一个文件夹myPackage, 里面有__init__.py和mmm.py,mmm.py里有fun1和fun2两个函数,你可以
import myPackage.mmm
myPackage.mmm.fun1()
myPackage.mmm.fun2()
或者
from myPackage.mmm import fun1,fun2
fun1()
fun2()
情况3:任意目录下的包或py文件
比如你有一个myPackage包,里面有__init__.py和mmm.py,mmm.py里有fun1和fun2两个函数,但是放在d盘任意的/dir1/dir2/目录下,你可以
import sys
#将D:\dir1\dir2路径添加进系统路径
sys.path.append(r"D:\dir1\dir2")
# 然后就可以正常导入包了
from myPackage.mmm import fun1,fun2
fun1()
fun2()
'''或者
import myPackage.mmm
myPackage.mmm.fun1()
myPackage.mmm.fun2()
'''
pyspark导入自定义包
如果有一个自定义文件file_name.py,是很多代码都需要导入这个文件的函数。那么可以把file_name.py压缩成file.zip,放在hdfs的/dir1/dir2/目录下,也可以放在正常目录下。使用addPyFile函数后就可以导入file_name这个模块了。
spark.sparkContext.addPyFile("hdfs:///dir1/dir2/file.zip")
import file_name
或者
提交python任务时增加一个参数,把zip或py文件一起加载
spark-submit --master yarn --deploy-mode cluster --py-files hdfs:///dir1/dir2/file.zip /root/Demo6.py
然后python文件里就可以
import file_name