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

如何提交依赖于 google dataproc 集群的 pyspark 作业

PySpark 读取不存在文件时的错误处理

在PySpark 2上加入DataFrame时出错

'Pods-App'目标具有传递依赖关系,包括在swift框架中使用GTM时的静态二进制文件