【问题标题】:How to read zip submitted by --pyfiles from PySpark application如何从 PySpark 应用程序中读取 --pyfiles 提交的 zip
【发布时间】:2021-05-14 14:09:08
【问题描述】:
我有以下文件夹结构。我压缩了source 文件夹并运行spark-submit 和source.zip 作为--py-files。我的问题是,如何从 PySpark 应用程序中读取 config.hcl 文件?我试过SparkFiles.getRootDirectory()+'/source/config.hcl',但没用。错误说没有这样的文件或目录。非常感谢您的帮助。我正在尝试从app.py 读取config.hcl。我如何在 zip 中引用它?或者如何先解压?
source
| config.hcl
app.py.
【问题讨论】:
标签:
python
apache-spark
pyspark
path
operating-system
【解决方案1】:
您无法读取config.hcl 文件的主要原因有两个:
- 上传 zip 文件并通过
--py-files 提交时,包仍保留在 zip 文件中而不提取(例如 /private/var/folders/81/c3fgx2qx6nq3lh2v983cdcd80000gn/T/spark-043999a0-c7fb-409c-a95d-4b8a902e55f0/userFiles-c3301b1a-b47e-4411-a2e9-ef0d8c2dc347/a.zip)
- 因为 if (1),你阅读
config.hcl 的方式有点不同,你需要改为阅读ZipFile
我创建了一个测试文件a.zip,结构如下
├── a
│ ├── __init__.py
│ ├── a.py
│ └── a.txt
# __init__.py
from .a import *
# a.py
from os import path
from zipfile import ZipFile
def test():
zip = ZipFile(path.dirname(path.dirname(path.abspath(__file__))))
with zip.open('a/a.txt') as f:
print(f.readlines())
# a.txt
'Hello World'
# spark-submit --py-files a.zip ...
import a
a.test()
# 'Hello World'