【问题标题】:Can we exclude or include only particular file extensions from Databricks Autoloader?我们可以从 Databricks Autoloader 中排除或仅包含特定的文件扩展名吗?
【发布时间】:2021-12-07 22:47:07
【问题描述】:

现在,databricks 自动加载器需要一个目录路径,所有文件都将从该路径加载。但万一其他类型的日志文件也开始进入该目录 - 有没有办法让 Autoloader 在准备数据帧时排除这些文件?

df = spark.readStream.format("cloudFiles") \
  .option(<cloudFiles-option>, <option-value>) \
  .schema(<schema>) \
  .load(<input-path>)

【问题讨论】:

    标签: databricks databricks-autoloader


    【解决方案1】:

    Autoloader 支持将 glob 字符串指定为 &lt;input-path&gt; - 来自 documentation

    &lt;input-path&gt; 可以包含文件 glob 模式

    Glob 语法支持 different options, like, * for any character, etc. 所以你可以指定 input-path as, path/*.json 例如。您也可以排除文件,但与包含模式相比,构建该模式可能稍微复杂一些,但仍有可能 - 例如,*.[^l][^o][^g] 应排除扩展名为 .log 的文件

    【讨论】:

    • Alex 这真的很有帮助。我虽然这不适用于子嵌套的动态生成文件夹,但它也适用于此。这为我解决了问题!
    【解决方案2】:

    使用pathGlobFilter 作为选项之一,并提供正则表达式来过滤文件类型或具有特定名称的文件。

    例如,要从加载位置跳过文件名为 A1.csv、A2.csv .... A9.csv 的文件,pathGlobFilter 的值将如下所示:

    df = spark.read.load("/file/load/location,
                         format="csv", 
                         schema=schema, 
                         pathGlobFilter="A[0-9].csv")
    

    【讨论】:

    • Fromd docs: "pathGlobFilter 仅用于 include 文件名与模式匹配的文件",因此不会跳过这些文件
    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2013-08-03
    • 2018-03-04
    相关资源
    最近更新 更多