You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Azure DataLake多子文件夹中的CSV数据加载到Azure Databricks的DataFrame中

解决方案:加载Azure DataLake多层子文件夹中的CSV到Databricks DataFrame

我来帮你搞定这个问题!你当前的代码没法正常运行,核心原因是路径匹配的范围不够——/FolderName/*只能匹配主文件夹下直接的子目录(也就是YearName2019、YearName2020这类年份文件夹),但没法递归深入到里面的Month子文件夹去读取CSV文件。下面给你几个可行的解决方案:

方案1:使用递归通配符**(最简单直接)

Spark支持用**来匹配任意层级的子目录,你只需要把路径改成匹配所有层级下的CSV文件就行:

df = spark.read.load(
    '/FolderName/**/*.csv',
    format='csv',
    sep=',',
    header='True',
    inferSchema=True
)

这里**会遍历主文件夹下所有层级的子目录,*.csv则精准匹配所有CSV文件,这样就能把所有年份、月份文件夹里的CSV都加载进来。

方案2:精准匹配层级通配符

如果你想更精准地控制匹配范围(比如只加载特定格式的年份/月份文件夹),可以用多层通配符来对应你的目录结构:

df = spark.read.load(
    '/FolderName/YearName*/Month*/*.csv',
    format='csv',
    sep=',',
    header='True',
    inferSchema=True
)

这个路径会匹配所有以YearName开头的文件夹,再匹配里面所有以Month开头的文件夹,最后读取其中的CSV文件,完全贴合你的目录结构。

方案3:启用递归文件查找选项

你也可以保持原来的基础路径,通过添加recursiveFileLookup选项让Spark递归查找子目录里的文件:

df = spark.read.option("recursiveFileLookup", "true") \
    .load('/FolderName/*',
          format='csv',
          sep=',',
          header='True',
          inferSchema=True)

这个选项会告诉Spark:不要只停留在当前匹配的目录,要递归遍历所有子目录去查找符合格式的文件。

额外注意事项

  • 确保所有目标文件都是CSV格式,避免加载到其他杂项文件;如果有非CSV文件在这些目录里,可以用pathGlobFilter选项进一步过滤,比如.option("pathGlobFilter", "*.csv")。
  • 如果不同CSV文件的 schema 不一致,inferSchema=True可能会导致读取异常,建议提前定义统一的schema,用.schema(your_defined_schema)来替代自动推断。
  • 确认你的Databricks集群已经配置了正确的权限,能够访问Azure DataLake Storage中的这些文件夹。

内容的提问来源于stack exchange,提问作者shubham kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:37:41