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

Palantir Foundry:能否在Python Transform中添加对象附件?

在Palantir Foundry中通过Python Transform批量关联PDF到对象Attachment字段

可以通过Python Transform实现批量关联,无需手动操作或自行构建复杂API工具,以下是具体方案:

核心思路

对象的attachment类型字段本质上存储的是Foundry文件引用结构体,只要在Python Transform中生成符合该格式的数据集,即可直接作为对象的底层数据集来关联已上传的PDF文件。

具体步骤

  • 准备关联映射数据:确保你有一份包含「对象唯一ID」和「对应PDF文件在非结构化数据集中的路径/哈希值」的映射表(可以是另一个结构化数据集,或从非结构化数据集的元数据中提取关联逻辑)。
  • 在Python Transform中构造Attachment字段:
    1. 读取非结构化数据集的元数据,获取每个PDF的datasetRid、文件路径、哈希值等关键信息;
    2. 关联对象ID,构造符合attachment字段格式的结构体,示例格式如下:
      {
          "fileReference": {
              "datasetRid": "ri.foundry.main.dataset.xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
              "path": "/path/to/your/file.pdf",
              "hash": "sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
          },
          "fileName": "your_file_name.pdf"  # 可选,用于Workshop中显示文件名
      }
      
    3. 将构造好的Attachment字段与对象ID字段一起写入输出数据集,确保输出数据集的schema与对象的底层数据集schema匹配(需提前在对象定义中创建attachment类型字段)。
  • 更新对象底层数据集:将Python Transform输出的数据集设为对象的底层数据集,或通过对象配置中的字段映射关联该Attachment字段。

关键代码示例

from transforms.api import transform, Input, Output
import pyspark.sql.functions as F

@transform(
    output=Output("/path/to/your/object-dataset"),
    pdf_ds=Input("/path/to/your/unstructured-pdf-dataset"),
    object_mapping=Input("/path/to/your/object-id-pdf-mapping")
)
def compute(output, pdf_ds, object_mapping):
    # 读取非结构化数据集的元数据,获取文件引用信息
    pdf_metadata = pdf_ds.filesystem().list_files()
    pdf_df = spark.createDataFrame(pdf_metadata) \
        .select(
            F.col("path").alias("pdf_path"),
            F.col("hash").alias("pdf_hash"),
            F.lit(pdf_ds.rid).alias("dataset_rid")
        )
    
    # 关联对象ID映射表
    mapping_df = object_mapping.dataframe()
    final_df = mapping_df.join(pdf_df, on="pdf_identifier", how="inner") \
        .withColumn(
            "attachment_field",
            F.struct(
                F.struct(
                    F.col("dataset_rid").alias("datasetRid"),
                    F.col("pdf_path").alias("path"),
                    F.col("pdf_hash").alias("hash")
                ).alias("fileReference"),
                F.col("pdf_file_name").alias("fileName")
            )
        ) \
        .select("object_id", "attachment_field")  # 保留对象ID和Attachment字段
    
    # 写入输出数据集
    output.write_dataframe(final_df)

注意事项

  • 确保你的Python Transform拥有访问非结构化数据集、对象数据集及映射表的权限;
  • 批量处理20000个文件时,建议分批次处理或优化Spark作业配置,避免性能问题;
  • 提前在对象定义中创建好attachment类型的字段,确保输出数据集的schema与对象schema完全匹配;
  • 完成后可在Workshop中验证对象的Attachment字段是否正确加载PDF预览,同时检查操作日志是否正常记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:37:22