具有静态文件依赖关系的python包在Pyspark中使用时无法读取静态文件
我正试图解决python包PySpark的一个问题。我开发了一个python包,它具有以下结构具有静态文件依赖关系的python包在Pyspark中使用时无法读取静态文件,python,python-2.7,pyspark,Python,Python 2.7,Pyspark,我正试图解决python包PySpark的一个问题。我开发了一个python包,它具有以下结构 sample_package/ |-config/ |-sample.ini |-main.py |-__init__.py 在我的main.py中,我有一个代码片段,它从config/目录中读取配置文件,如下所示 import ConfigParser, os def sample_func(): config = ConfigParser.ConfigParse
sample_package/
|-config/
|-sample.ini
|-main.py
|-__init__.py
在我的main.py
中,我有一个代码片段,它从config/
目录中读取配置文件,如下所示
import ConfigParser, os
def sample_func():
config = ConfigParser.ConfigParser()
configfile = os.path.join(os.path.dirname(__file__), 'config', 'sample.ini')
config.read(configfile)
return config.sections()
我创建了上述包的一个zip文件,名为sample\u package.zip
,并将该zip作为pyspark依赖项包含在内
addPyFile(path/to/zip/file)
在我的pyspark作业中,当我导入
sample\u包时,导入工作正常,我能够在main内部调用sample\u func
,但是我的python包无法读取sample.ini
文件。在普通python程序中执行时,它可以正常工作,但在pyspark作业中不能。在pyspark环境中访问静态文件时是否有任何路径操作?如何让python包正确读取配置文件?我自己找到了答案。这更多的是python打包问题,而不是pyspark环境问题。看起来我必须使用pkgutil
模块来引用我的静态资源,它修改了我的函数,如下所示
import ConfigParser, os, pkgutil, StringIO
def sample_func():
config = ConfigParser.ConfigParser()
configfile = pkgutil.get_data('sample_package', 'config/sample.ini')
cf_buf = StringIO.StringIO(configfile)
config.readfp(cf_buf)
return config.sections()
更简单的版本:
from configparser import ConfigParser
import pkgutil
def sample_func():
config = ConfigParser()
# os.path.join is not needed.
config_data = pkgutil.get_data(__name__, 'config/sample.ini').decode()
config.read_string(config_data)
return config.sections()