我正在尝试列出所有文件夹和子文件夹中的所有文件。我正在尝试将所有内容放入RDD或数据帧中(我认为这并不重要,因为它只是文件名和路径的列表)。我在网上找到了一些看似有希望的代码,但似乎无能为力。我对Scala还是很陌生,所以也许我只是错过了一些简单的东西。
第一个代码示例:
import org.apache.spark.sql.functions.input_file_name
val inputPath: String = "mnt/rawdata/2019/01/01/corp/*.gz"
val df = spark.read.text(inputPath)
.select(input_file_name, $"value")
.as[(String, String)] // Optionally convert to Dataset
.rdd // or RDD
第二个代码示例:
import java.io.File
def getListOfFiles(dir: String):List[File] = {
val d = new File(dir)
if (d.exists && d.isDirectory) {
d.listFiles.filter(_.isFile).toList
} else {
List[File]()
}
}
val files = getListOfFiles("mnt/rawdata/2019/01/01/corp/")
答案 0 :(得分:0)
在Files.walk
程序包中,有一种有用的nio
方法用于递归树遍历。
import java.nio.file._
import scala.collection.JavaConverters._
val files = Files.walk(FileSystems.getDefault.getPath("mnt/rawdata/2019/01/01/corp")).iterator.asScala.toList
请注意,它会同时返回文件和目录,因此如果只需要文件,则需要进行过滤。