如何从spark dataproc检查google存储中是否存在文件?

j0pj023g  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(392)

我假设google storage connector允许直接查询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

有没有一种只使用hadoopapi访问google存储文件的方法?

wn9m85ua

wn9m85ua1#

那是因为 FileSystem.get(...) 返回默认值 FileSystem 根据你的配置 HDFS 只能使用以开头的路径 hdfs:// . 使用以下命令获得正确的fs。

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

a5g8bdjr2#

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)

相关问题