Palantir Foundry:如何将Compass File Lister生成的JSON用作Transform输入?
问题解决方案
核心问题分析
- 依赖冗余错误:你用
yaml模块加载JSON格式的rids.json文件,属于不必要的依赖,且Foundry构建环境未预装yaml包,直接导致构建时抛出ModuleNotFoundError。 - 执行环境差异:
compute函数外的代码会在构建阶段执行,该环境的依赖配置与预览模式不同,未预装的第三方库会直接触发报错。
修改后的代码
from pyspark.sql import functions as F from transforms.api import transform, Input, Output from pkg_resources import resource_stream from functools import reduce from pyspark.sql import DataFrame import json # 替换yaml为Python标准库的json模块 # 加载Compass Files Lister生成的rids.json文件 stream = resource_stream(__name__, "rids.json") docs = json.load(stream) raw_datasets = docs["childrenRids"] @transform( output=Output("output name"), **{ raw_dataset: Input(raw_dataset) for raw_dataset in raw_datasets } ) def compute(output, **transform_inputs): processed_dataframes = [] for input_name, transform_input in transform_inputs.items(): input_dataframe = transform_input.dataframe() processed_dataframes.append(input_dataframe.withColumn( "data_source", F.lit(input_name) )) df = reduce(DataFrame.unionAll, processed_dataframes) output.write_dataframe(df)
额外说明
- 确保
rids.json文件与当前Transform代码文件处于代码仓库的同一目录下,保证resource_stream能正确读取文件。 - 关于Compass Files Lister的动态Transform输入场景,确实建议Palantir补充相关示例文档,降低用户上手成本。
内容的提问来源于stack exchange,提问作者tessa
相关产品推荐
相关产品推荐

