【问题标题】:How to check if a file exists in Google Storage from Spark Dataproc?如何从 Spark Dataproc 检查 Google Storage 中是否存在文件?
【发布时间】:2018-02-15 05:24:15
【问题描述】:

我假设 Google 存储连接器允许直接查询 GS,就好像它是来自 Dataproc 中 Spark 的 HDFS,但看起来以下内容不起作用(来自 Spark Shell):

scala> import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.FileSystem

scala> import org.apache.hadoop.fs.Path
import org.apache.hadoop.fs.Path

scala> FileSystem.get(sc.hadoopConfiguration).exists(new Path("gs://samplebucket/file"))
java.lang.IllegalArgumentException: Wrong FS: gs://samplebucket/file, expected: hdfs://dataprocmaster-m

有没有办法只使用 Hadoop API 来访问 Google Storage 文件?

【问题讨论】:

    标签: hadoop apache-spark google-cloud-dataproc


    【解决方案1】:
    import org.apache.spark.{SparkConf, SparkContext}
    import org.apache.hadoop.fs.{FileSystem, Path}
    
    val p = "gs://<your dir>"
    
    val path = new Path(p)
    val fs = path.getFileSystem(sc.hadoopConfiguration)
    fs.exists(path)
    
    fs.isDirectory(path)
    

    【讨论】:

    • 代码在 Scala 中,它独立工作,直接回答了如何检查文件是否存在的问题
    【解决方案2】:

    这是因为FileSystem.get(...) 返回默认的FileSystem,根据您的配置是HDFS,并且只能使用以hdfs:// 开头的路径。使用以下方法获取正确的 FS。

    Path p = new Path("gs://...");
    FileSystem fs = p.getFileSystem(...);
    fs.exists(p);
    

    【讨论】:

    • 谢谢,只要获得这样的文件系统就可以了:path.getFileSystem(sc.hadoopConfiguration)
    猜你喜欢
    • 2012-11-11
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 2015-08-05
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多