Not*_*nka 3 csv scala wildcard dataframe apache-spark
我想以可能的方式递归地DataFrame使用单个路径将给定文件夹中的所有csv文件读入Spark SQL .
我的文件夹结构看起来像这样,我希望包含一个路径的所有文件:
resources/first.csvresources/subfolder/second.csvresources/subfolder/third.csv这是我的代码:
def read: DataFrame =
sparkSession
.read
.option("header", "true")
.option("inferSchema", "true")
.option("charset", "UTF-8")
.csv(path)
Run Code Online (Sandbox Code Playgroud)
设置path于.../resource/*/*.csv省略1,而.../resource/*.csv忽略了2和3.
我知道csv()也会将多个字符串作为路径参数,但如果可能的话,我想避免这种情况.
注意:我知道我的问题类似于如何在单个加载中导入多个csv文件?,除了我想要包含所有包含的文件夹的文件,独立于他们在主文件夹中的位置.
如果您的resources目录中只有csv文件和只有一个级别的子文件夹,那么您可以使用resources/**.
编辑
否则,您可以使用Hadoop FileSystem类递归列出目录中的每个csv文件resources,然后将列表传递给.csv()
val fs = FileSystem.get(new Configuration())
val files = fs.listFiles(new Path("resources/", true))
val filePaths = new ListBuffer[String]
while (files.hasNext()) {
val file = files.next()
filePaths += file.getPath.toString
}
val df: DataFrame = spark
.read
.options(...)
.csv(filePaths: _*)
Run Code Online (Sandbox Code Playgroud)
现在你可以RecursiveFileLookup在spark3中使用了。
val recursiveLoadedDF = spark.read
.option("recursiveFileLookup", "true")
.csv("resources/")
Run Code Online (Sandbox Code Playgroud)
更多参考:递归文件查找
| 归档时间: |
|
| 查看次数: |
2984 次 |
| 最近记录: |