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

时间:2017-09-06 16:14:00

标签: 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

有没有办法只使用Hadoop API访问Google存储文件?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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)