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

问题描述 投票:0回答:1

我试图解决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_package.zip并将zip包含为pyspark依赖项

addPyFile(path/to/zip/file)

在我的pyspark工作,当我导入sample_package导入工作正常,我能够调用main中的sample_func,但是我的python包无法读取sample.ini文件。在普通的python程序中执行时,它工作正常但不在pyspark作业中。在访问静态文件时,是否在pyspark环境中进行了任何路径操作?如何让我的python包正确读取配置文件?

python python-2.7 pyspark
1个回答
0
投票

我自己想出了答案。它更像是一个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()
© www.soinside.com 2019 - 2024. All rights reserved.