在使用pyspark提交作业时,如何使用--files参数访问静态文件上传?

luc*_*mia 10 python apache-spark pyspark google-cloud-dataproc

例如,我有一个文件夹:

/
  - test.py
  - test.yml
Run Code Online (Sandbox Code Playgroud)

并通过以下方式将作业提交给spark群集:

gcloud beta dataproc jobs submit pyspark --files=test.yml "test.py"

test.py,我想访问我上传的静态文件.

with open('test.yml') as test_file:
    logging.info(test_file.read())
Run Code Online (Sandbox Code Playgroud)

但得到以下例外:

IOError: [Errno 2] No such file or directory: 'test.yml'
Run Code Online (Sandbox Code Playgroud)

如何访问我上传的文件?

zer*_*323 14

使用SparkContext.addFile(和--files)分发的文件可以通过访问SparkFiles.它提供了两种方法:

  • getRootDirectory() - 返回分布式文件的根目录
  • get(filename) - 返回文件的绝对路径

我不确定是否有任何Dataproc特定的限制,但这样的事情应该可以正常工作:

from pyspark import SparkFiles

with open(SparkFiles.get('test.yml')) as test_file:
    logging.info(test_file.read())
Run Code Online (Sandbox Code Playgroud)