代码之家  ›  专栏  ›  技术社区  ›  Fizi

pyspark:在python代码中访问静态非python文件

  •  0
  • Fizi  · 技术社区  · 5 年前

    /
      - test.py
      - test.yml
    

    并将作业提交给spark cluster,其中包括:

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

    但有以下例外:

    IOError: [Errno 2] No such file or directory: 'test.yml'
    

    如何访问我上传的文件?

    0 回复  |  直到 10 年前
        1
  •  18
  •   notNull    7 年前

    使用 SparkContext.addFile --files )可通过 SparkFiles . 它提供了两种方法:

    • getRootDirectory()
    • get(filename) -返回文件的绝对路径

    from pyspark import SparkFiles
    
    with open(SparkFiles.get('test.yml')) as test_file:
        logging.info(test_file.read())
    
        2
  •  1
  •   BabyPanda    7 年前

    目前,由于Dataproc不再是beta版,为了 直接访问 来自PySpark代码的云存储中的一个文件,使用 --files 参数将完成这项工作。 SparkFiles 不需要。例如:

    gcloud dataproc jobs submit pyspark \
      --cluster *cluster name* --region *region name* \
      --files gs://<BUCKET NAME>/<FILE NAME> gs://<BUCKET NAME>/filename.py
    

    通过Spark API从地面军事系统读取输入时,它与地面军事系统连接器一起工作。

        3
  •  0
  •   Winston Chen    10 年前

    是的,沙根是对的。

    但是,说到这里,将文件复制到所有Worker和master的文件结构中的同一个目标中也是可行的。Exp,您可以创建如下文件夹 /opt/spark-job/all-files/ rsync 将该文件复制到所有这些脚本中,然后可以在spark脚本中使用该文件。但请不要这样做。DFS或S3比这种方法要好得多。