【问题标题】:Accessing file as an argument to PySpark driver - Google Dataproc Jobs访问文件作为 PySpark 驱动程序的参数 - Google Dataproc Jobs
【发布时间】:2020-07-25 23:36:03
【问题描述】:

作为gcloud dataproc 上的PySpark Job 的一部分,我们有多个文件,其中一个是json,它被传递给驱动程序python 文件。驱动程序文件本身位于谷歌存储(gs 文件系统)上。

我们正在尝试使用gcloud dataproc api for python 提交此作业。

submit_job中job对象使用的配置是:

job_details = {
        'placement': {
            'cluster_name': cluster_name
        },
        'pyspark_job': {
            'main_python_file_uri': 'gs://driver_file.py',
            'python_file_uris':['gs://package.whl'],
            'file_uris':['gs://config.json'],
            'args':['gs://config.json']
        }
    }

我的理解是 config.json 应该提供给驱动程序,gcloud 可以从日志中正确执行 - Downloading gs://config.json to /tmp/tmprandomnumber/fop_gcp_1.json

gcloud documentation pagefile_uris 看来,这似乎是正确的-

要复制到 Python 工作目录的文件的 HCFS URI 驱动程序和分布式任务。对于单纯的并行任务很有用。

现在经过大量调试,我们偶然发现了SparkFiles.get('config.json'),它旨在获取基于此question 上传到驱动程序的文件

但这也失败了[Errno 2] No such file or directory: '/hadoop/spark/tmp/spark-random-number/userFiles-random-number/config.json'

【问题讨论】:

    标签: python apache-spark google-cloud-platform pyspark google-cloud-dataproc


    【解决方案1】:

    好吧,想通了,把它贴出来,这样它可以帮助那里的人!

    使用SparkContext.addFile -

    在每个节点上添加要与此 Spark 作业一起下载的文件。

    SparkContext.addFile(config_file_name)
    

    然后是一个简单的

    from pyspark import SparkFiles
    SparkFiles.get(config_file_name)
    

    注意:所有这些都只能在您的代码中初始化 SparkContext 之后完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      相关资源
      最近更新 更多