如何在Palantir Foundry上传大量PDF至MediaSet并解决事务超限问题
解决MediaSet批量PDF上传超限及Workshop适配问题
方案1:分块上传至单个MediaSet
原代码通过put_dataset_files一次性提交所有文件,触发了事务上传数量上限。修改为分批次上传,每批提交一次事务,避免超限:
from transforms.api import transform, Input from transforms.mediasets import MediaSetOutput @transform( output_mediaset=MediaSetOutput("<your path to mediaset>"), input_dataset=Input("<your path to dataset with raw files>") ) def compute(input_dataset, output_mediaset): # 调整批次大小,建议从500开始测试,适配平台阈值 BATCH_SIZE = 500 file_list = list(input_dataset.files()) for idx in range(0, len(file_list), BATCH_SIZE): batch = file_list[idx:idx+BATCH_SIZE] for file in batch: with input_dataset.filesystem().open(file.path, 'rb') as f: output_mediaset.put(file.path, f.read()) # 每批上传后提交事务 output_mediaset.commit()
这种方式保持单个MediaSet,完全兼容Workshop原生展示组件,无需前端调整。
方案2:拆分多MediaSet并适配Workshop
若分块上传仍受限,需拆分多个MediaSet时,可通过以下方式适配Workshop组件:
- 统一命名规则:将拆分后的MediaSet按
media_set_01、media_set_02等规则命名,便于批量调用。 - 自定义聚合数据源:在Workshop中创建自定义数据源,通过脚本聚合所有MediaSet的文件:
将该数据源绑定到展示组件,即可加载所有拆分后的文件。from transforms.mediasets import MediaSet def get_aggregated_files(): media_paths = [ "<path to media_set_01>", "<path to media_set_02>", # 列出所有拆分后的MediaSet路径 ] all_files = [] for path in media_paths: ms = MediaSet(path) all_files.extend(ms.files()) return all_files - 使用多数据源组件:如果Workshop提供支持多MediaSet的展示组件(如分组文件浏览器),直接添加所有拆分后的MediaSet作为数据源即可。
优化提示
- 提前清理无效PDF(损坏、空文件等),减少上传总量。
- 若平台支持异步任务,可并行处理多批次上传,提升效率。
内容的提问来源于stack exchange,提问作者w1n
相关产品推荐
相关产品推荐

