Palantir Foundry:能否在Python Transform中添加对象附件?
在Palantir Foundry中通过Python Transform批量关联PDF到对象Attachment字段
可以通过Python Transform实现批量关联,无需手动操作或自行构建复杂API工具,以下是具体方案:
核心思路
对象的attachment类型字段本质上存储的是Foundry文件引用结构体,只要在Python Transform中生成符合该格式的数据集,即可直接作为对象的底层数据集来关联已上传的PDF文件。
具体步骤
- 准备关联映射数据:确保你有一份包含「对象唯一ID」和「对应PDF文件在非结构化数据集中的路径/哈希值」的映射表(可以是另一个结构化数据集,或从非结构化数据集的元数据中提取关联逻辑)。
- 在Python Transform中构造Attachment字段:
- 读取非结构化数据集的元数据,获取每个PDF的
datasetRid、文件路径、哈希值等关键信息; - 关联对象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中显示文件名 } - 将构造好的Attachment字段与对象ID字段一起写入输出数据集,确保输出数据集的schema与对象的底层数据集schema匹配(需提前在对象定义中创建
attachment类型字段)。
- 读取非结构化数据集的元数据,获取每个PDF的
- 更新对象底层数据集:将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
相关产品推荐
相关产品推荐

