Databricks Autoloader如何筛选特定文件扩展名(包含/排除)?
如何用Databricks Autoloader排除目录中的特定文件类型
当然可以!Databricks Autoloader提供了实用的配置选项,能轻松帮你过滤掉目录里混入的日志文件或者其他非目标文件。下面给你两种常用的实现方式,附代码示例:
方法1:通过cloudFiles.includePattern指定仅加载目标文件
这个选项允许你用正则表达式定义只加载符合规则的文件,相当于间接排除了不符合的文件。比如你的目标文件是CSV/Parquet格式,而日志文件都是.log后缀,就可以这么写:
df = spark.readStream.format("cloudFiles") \ .option("cloudFiles.format", "csv") # 替换为你的目标文件格式,比如parquet、json .option("cloudFiles.includePattern", ".*\\.(csv|parquet)$") # 仅匹配csv/parquet后缀的文件 .schema(your_target_schema) \ .load("/path/to/your/directory")
这里的正则.*\\.(csv|parquet)$会匹配所有以.csv或.parquet结尾的文件,那些.log日志文件会被自动跳过。
方法2:用cloudFiles.excludePattern直接排除指定文件
如果你明确知道要排除的文件模式(比如所有.log文件),用这个选项更直接:
df = spark.readStream.format("cloudFiles") \ .option("cloudFiles.format", "json") # 你的目标文件格式 .option("cloudFiles.excludePattern", ".*\\.log$") # 排除所有.log结尾的文件 .schema(your_target_schema) \ .load("/path/to/your/directory")
这个配置会让Autoloader直接跳过所有匹配.log后缀的文件,只处理符合你指定格式的文件。
几个重要的注意点
- 正则表达式要遵循Java正则规范,所以转义符需要用
\\而不是单个\。 - Autoloader默认会递归扫描子目录,这两个过滤规则同样会作用于子目录里的文件。
- 如果你同时配置了
includePattern和excludePattern,exclude规则的优先级更高——也就是说,如果一个文件同时符合两个规则,它会被排除。
内容的提问来源于stack exchange,提问作者Keshav Agrawal




