我在配置文件 col1 和 col2 中有两列。
现在我必须在我的主 python-transform 中导入这个配置文件,然后提取列的值,以便通过迭代所有可能的值来从这些值创建动态输出路径。
例如 ouput_path1=Constant+value1+value2
输出路径2=常数+值3+值4
请提出一些在 palantir foundary(code-repo) 中生成输出文件的解决方案
我在配置文件 col1 和 col2 中有两列。
现在我必须在我的主 python-transform 中导入这个配置文件,然后提取列的值,以便通过迭代所有可能的值来从这些值创建动态输出路径。
例如 ouput_path1=Constant+value1+value2
输出路径2=常数+值3+值4
请提出一些在 palantir foundary(code-repo) 中生成输出文件的解决方案
您可能想要使用的是转换生成器。在文档的“Python 转换”一章中,有一节“转换生成”概述了这一点。
最直接的路径可能会生成多个转换,但如果您只想要一个输出到多个数据集的转换,那也是可能的(如果稍微复杂一点的话。)
对于前一种方法,您可以将 .yaml 文件(或类似文件)添加到您的存储库中,在其中定义您的值,然后读取 .yaml 文件并根据这些值生成多个转换。文档给出了一个几乎完全做到这一点的例子。
对于后一种方法,您可能希望在管道定义器中读取 .yaml 文件,然后将输出动态添加到单个转换中。然后,在您的转换代码中,您需要能够以某种方式处理任意数量的输出(我假设您有一个计划。)我怀疑您可能需要为此回退到手动转换注册,或者您可能需要在不使用装饰器的情况下构造一个变换对象。如果这是您需要的解决方案,我可以为您构建一个示例。
不过,在您继续之前,我想注意输入和输出的数量固定在“CI-time”或“compile-time”。当您在创作中按下“提交”按钮(或合并 PR)时,正是在此时运行生成转换/输出的代码。稍后,当您构建实际数据集(即运行转换)时,无法再添加/删除输入、输出和转换。
因此,要更改输入/输出/转换的数量,您需要转到存储库,修改 .yaml 文件(或您选择使用的任何文件),然后按下提交按钮。这将导致 CI 检查运行,并发布新代码,包括过程中可能已生成的任何新转换。
如果这对您不起作用(即您想在数据集构建时决定要生成哪些输出),您将不得不从根本上重新考虑您的方法。否则,您应该对我上面粗略概述的两种解决方案之一感到满意。
您不能以编程方式基于其他数据集的内容创建转换。数据集是在 CI 时创建的。
但是,您可以在代码仓库中拥有一个常量文件,该文件可以在 CI 时读取,并使用它来生成转换。IE:
myconfig.py:
dataset_pairs = [
{
"in": "/path/to/input/dataset,
"out": "/path/to/output/dataset,
},
{
"in": "/path/to/input/dataset2,
"out": "/path/to/output/dataset2,
},
# ...
{
"in": "/path/to/input/datasetN,
"out": "/path/to/output/datasetN,
},
]
///////////////////////////
anotherfile.py
from myconfig import dataset_pairs
TRANSFORMS = []
for conf in dataset_pairs:
@transform_df(Output(conf["out"]), my_input=Input(conf["in"]))
def my_generated_transform(my_input)
# ...
return df
TRANSFORMS.append(my_generated_transform)
要重新迭代,您不能基于数据集内容以编程方式创建 config.py,因为当此代码运行时,它处于 CI 时间,因此它无权访问数据集。