Apache spark 如何在Databricks dbfs**中列出文件键,而不列出**dbutils
显然,由于其他要求,我必须使用spark submit样式的作业,但仍然需要列出dbfs中的文件键并对其进行迭代,以决定将哪些文件用作流程的输入 使用scala,我可以使用spark或hadoop中的哪个库来检索特定模式的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
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)
}