具有静态文件依赖关系的python包在Pyspark中使用时无法读取静态文件

具有静态文件依赖关系的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

我正试图解决python包PySpark的一个问题。我开发了一个python包,它具有以下结构

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()