在Pyspark中使用时,具有静态文件依赖性的python包无法读取静态文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Pyspark中使用时,具有静态文件依赖性的python包无法读取静态文件相关的知识,希望对你有一定的参考价值。
我试图解决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包装问题,而不是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()
以上是关于在Pyspark中使用时,具有静态文件依赖性的python包无法读取静态文件的主要内容,如果未能解决你的问题,请参考以下文章
在python logger中获取双重日志 - 代码具有循环依赖性
将其中一个用作模块时如何在不同的笔记本中使用“sqlContext”(Pyspark)