Apache spark 如何在Databricks dbfs**中列出文件键,而不列出**dbutils

Apache spark 如何在Databricks dbfs**中列出文件键,而不列出**dbutils,apache-spark,hadoop,filesystems,azure-databricks,Apache Spark,Hadoop,Filesystems,Azure Databricks,显然,由于其他要求,我必须使用spark submit样式的作业,但仍然需要列出dbfs中的文件键并对其进行迭代,以决定将哪些文件用作流程的输入 使用scala,我可以使用spark或hadoop中的哪个库来检索特定模式的dbfs:/filekeys列表 import org.apache.hadoop.fs.Path import org.apache.spark.sql.SparkSession def ls(sparkSession: SparkSession, inputDir: St

显然,由于其他要求,我必须使用spark submit样式的作业,但仍然需要列出dbfs中的文件键并对其进行迭代,以决定将哪些文件用作流程的输入

使用scala,我可以使用spark或hadoop中的哪个库来检索特定模式的
dbfs:/filekeys
列表

import org.apache.hadoop.fs.Path
import org.apache.spark.sql.SparkSession

def ls(sparkSession: SparkSession, inputDir: String): Seq[String] = {
  println(s"FileUtils.ls path: $inputDir")
  val path = new Path(inputDir)
  val fs = path.getFileSystem(sparkSession.sparkContext.hadoopConfiguration)
  val fileStatuses = fs.listStatus(path)
  fileStatuses.filter(_.isFile).map(_.getPath).map(_.getName).toSeq
}
使用上述方法,如果我传入一个部分键前缀,如
dbfs:/mnt/path/to/folder
,而所述“folder”中存在以下键:

  • /mnt/path/to/folder/file1.csv
  • /mnt/path/to/folder/file2.csv
我得到的
dbfs:/mnt/path/to/folder在点击时不是目录

val path=newpath(inputDir)

需要使用SparkSession来执行此操作

我们是这样做的:

import org.apache.commons.io.IOUtils
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.spark.sql.SparkSession

def getFileSystem(sparkSession: SparkSession): FileSystem =
    FileSystem.get(sparkSession.sparkContext.hadoopConfiguration)

def listContents(sparkSession: SparkSession, dir: String): Seq[String] = {
  getFileSystem(sparkSession).listStatus(new path(dir)).toSeq.map(_.getPath).map(_.getName)
}