我可以在 Foundry 的管道中获取同步文本文件的文件名吗?

Can I get the file names for synced text files in my pipeline in Foundry?

我有一堆从我的原始系统同步的文本文件,我想要一种在 Foundry 转换下游使用文件名(除了文件内容)的简单方法。

我知道这可以使用原始文件访问,但这看起来很复杂,我只想要数据旁边的文件名。

如果您要立即进入代码库或代码工作簿,则可以使用 input_file_name() function (see proggeo's answer )。这可能比下面的更简单,但如果您要对数据执行其他操作,则将不起作用。

架构方法

如果您打开数据集,然后转到详细信息 -> 架构,您可以编辑架构以添加文件路径列,对于每一行,这将具有该行来自的文件路径的值.

关键部分是fieldSchemaListcustomMetadata下的"addFilePath": true成员_filePath。第一个是 TextDataFrameReader 用文件路径填充的特殊列,第二个告诉 reader 填充该列。下面示例中的另一列 (content) 仅包含每个文件中的所有内容。

有关详细信息,请参阅平台文档 Foundry core backend 中的 Metadata 部分。对于具有不同 Reader 类.

的 csv 和更多结构化数据,这也是可能的

完整架构示例

{
"fieldSchemaList": [
    {
        "type": "STRING",
        "name": "content",
        "nullable": null,
        "userDefinedTypeClass": null,
        "customMetadata": {},
        "arraySubtype": null,
        "precision": null,
        "scale": null,
        "mapKeyType": null,
        "mapValueType": null,
        "subSchemas": null
    },
    {
      "type": "STRING",
      "name": "_filePath",
      "nullable": null,
      "userDefinedTypeClass": null,
      "customMetadata": {},
      "arraySubtype": null,
      "precision": null,
      "scale": null,
      "mapKeyType": null,
      "mapValueType": null,
      "subSchemas": null
    }
],
"dataFrameReaderClass": "com.palantir.foundry.spark.input.TextDataFrameReader",
"customMetadata": {
    "textParserParams": {
      "parser": "SINGLE_COLUMN_PARSER",
      "nullValues": null,
      "nullValuesPerColumn": null,
      "charsetName": "UTF-8",
      "addFilePath": true,
      "addByteOffset": false,
      "addImportedAt": false
    }
}
}

仅当 dataFrameReaderClass 为 com.palantir.foundry.spark.input.TextDataFrameReader 时,ollie299792458 的响应才有效。

或者,您可以在使用 Spark input_file_name 函数读取代码库或工作簿中的数据集时获取文件名:

Creates a string column for the file name of the current Spark task.