Azure Databricks Autoloader意外读取子文件夹问题求助
Azure Databricks Autoloader 读取子文件夹问题排查与解决
问题原因
当启用cloudFiles.useNotifications=true时,Autoloader会切换为依赖Azure存储的事件通知(如Event Grid)来发现文件,此时recursiveFileLookup=false的配置会被忽略。原因在于存储通知机制默认监听指定根路径下的所有层级子目录,只要子目录内生成文件,就会向Autoloader发送通知触发摄入流程,递归查找的配置无法覆盖这种基于事件的监听逻辑。
可行解决方法
方法1:优化pathGlobFilter配置
细化匹配规则,确保仅匹配accounts根目录下的CSV文件:
spark.readStream.format("cloudFiles") .option("cloudFiles.format", "csv") .option("cloudFiles.useNotifications", "true") .option("pathGlobFilter", "*.csv") # 仅匹配当前加载路径下的CSV文件,不包含子目录 .load("/mnt/your-container/accounts")
方法2:使用cloudFiles.excludePaths排除指定目录
通过排除路径参数直接过滤snapshot子文件夹,比pathGlobFilter更直观:
spark.readStream.format("cloudFiles") .option("cloudFiles.format", "csv") .option("cloudFiles.useNotifications", "true") .option("cloudFiles.excludePaths", '["accounts/snapshot/*"]') .load("/mnt/your-container/accounts")
注意:路径需相对于加载根路径(../accounts)编写,或使用完整ADLS路径。
方法3:调整存储事件通知范围
若拥有存储账户管理权限,可修改Event Grid订阅的事件过滤条件,将通知范围限定为accounts根目录(不包含子目录)。操作时在Event Grid订阅的「过滤」设置中添加路径前缀过滤,仅触发根目录下的文件事件。此方法需确保不影响Dynamics365导出文件的正常流程。
内容的提问来源于stack exchange,提问作者user16292606
相关产品推荐
相关产品推荐

