如何从Spark Dataproc检查Google Storage中是否存在文件?

Dan*_*ez 2 hadoop apache-spark google-cloud-dataproc

我以为Google Storage连接器将允许直接查询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
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用Hadoop API访问Google存储文件?

Pra*_*ota 6

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

Path p = new Path("gs://...");
FileSystem fs = p.getFileSystem(...);
fs.exists(p);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,只要像这样获取文件系统就可以了:`path.getFileSystem(sc.hadoopConfiguration)` (2认同)

Rub*_*uck 5

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)
Run Code Online (Sandbox Code Playgroud)