0

我们可以在 my_compute_function 中动态更改输出数据集路径,如下所示

from transforms.api import transform, Input, Output


@transform(
  my_output=Output("/path/to/my/dataset"),
  my_input=Input("/path/to/input"),
)
def my_compute_function(my_output, my_input):
  **my_output.path = "new path"**
  my_output.write_dataframe(
    my_input.dataframe()
  )
4

1 回答 1

0

不,这是不可能的。原因是输入/输出/转换固定在“CI-time”或“build-time”。当您在创作中按“提交”或合并 PR 时,将启动 CI 作业。

在这个 CI 工作中,输入和输出之间的所有关系都是确定的。创建尚不存在的输出数据集,并向其中添加“jobspec”。“jobspec”是 JSON 的片段,它向铸造厂描述如何生成特定数据集。

每当您按下数据集上的“构建”按钮(或通过计划或类似方式构建数据集)时,都会查阅作业规范。它包含对存储库、修订版、源文件和构建此数据集的函数的入口点的引用。从那里开始编排并开始构建,调用您的函数来生成最终输出。

这种机制允许您获得整个管道的“静态视图”,然后您可以使用 Monocle 将其可视化,正如您可能已经看到的那样。

名义上的单片眼镜示例

根据您的需求,您可以使用以下一些解决方案:

  • 以某种方式标记您在转换中生成的行,以便即使您将它们放入单个数据集中,您也可以稍后通过此标记/类别选择它们
  • 如果您的类别集不经常更改,您可以提前创建输出数据集,然后将行过滤到它们应该进入的适当数据集中。

后一种方法的主要缺点是它不是很动态,因此如果出现新类别,您必须手动更改代码以将其“分类”到新数据集中,直到数据可用。

还有其他解决方案(例如,最终可以进行 API 调用和手动调整输入/输出),但从维护的角度来看,它们更复杂且不可取。

于 2020-10-30T07:38:35.300 回答