scala 如何访问使用--files传递的Dataproc上的文件

jucafojl  于 5个月前  发布在  Scala
关注(0)|答案(3)|浏览(84)
gcloud dataproc jobs submit spark \
    --cluster=cluster \
    --region=region \
    --files=config.txt \
    --class=class \
    --jars=gs://abc.jar

字符串
我们需要访问驱动节点上的xml.txt文件。我如何访问驱动节点上的xml.txt文件,以及如何获取xml.txt文件的存储路径。
在HDFS世界中,使用类似的--files选项,我可以使用java.io.File(“java.txt”)访问驱动程序中的文件

bfrts1fy

bfrts1fy1#

我无法轻松访问gcp帐户进行测试(对此我很抱歉),但您可以尝试org.apache.spark.SparkFiles.get(String filename)类方法来访问文件的绝对路径。
文档:https://spark.apache.org/docs/latest/api/java/index.html?org/apache/spark/SparkFiles.html
希望能帮上忙。再见。

hlswsv35

hlswsv352#

Dataproc将驱动进程的当前(工作)目录设置为一个临时目录。通过--files标志提供的文件将在该目录中可用。
例如(list-dir.py):

import os

print(os.getcwd())
print(os.listdir('.'))

字符串
然后运行

gcloud dataproc jobs submit pyspark \
  --cluster=<cluster> --files=test.json list-dir.py 

...
/tmp/d50faeccc7e94c299cc1e7f257cc542c
['.test.json.crc', '.list-dir.py.crc', 'test.json', 'list-dir.py']


您可以看到test.json位于Spark驱动程序进程的当前目录中。

wbrvyc0a

wbrvyc0a3#

这个问题有点晚,但可能对某人有帮助:
由于您通过--files传递了config.txt,因此您可以在驱动程序节点中非常轻松地访问它:

with open("config.txt", "r") as f:
    # process f

字符串
如果您希望在作业的每个节点中都可以访问该文件,则可以通过在驱动程序节点中运行sc.addFile("config.txt")来添加它,然后通过SparkFiles.get("config.txt")在任何节点上访问它。
HTH

相关问题