KNIME工作流引擎

工作流引擎

在您查看了项目结构后,我们将查看一些实施细节。我们将介绍最重要的部分,因为您之前创建的项目中的示例代码已经在实现方法的代码中包含了详细的注释(也可以查看存储库org.knime.examples.numberformatter文件夹中的参考实现knime-examples)。
通常,Number Formatter节点以数据表作为输入,并将用户指定的格式字符串应用于Double输入表的每一列。为简单起见,输出表仅包含格式化的数字列作为字符串列。这基本上将String.format(…​)应用于Double值列表的 Java函数的功能包装到 KNIME 分析平台中可用的节点中。
让我们研究每个节点必须实现的最重要的方法。节点的功能在NumberFormatterNodeModel.java类中实现:

protected NumberFormatterNodeModel() {
    super(1, 1);
}

所述super(1, 1)在节点模型的构造调用指定的输出和输入表中的节点应该具有的数目。在这种情况下,它是一个输入和一个输出表。

BufferedDataTable[] execute(final BufferedDataTable[] inData, final ExecutionContext exec)节点的实际算法在execute方法中实现。只有在所有前面的节点都已成功执行并且所有数据在输入端口上可用后,才会调用该方法。输入表将在给定数组中可用,该数组inData包含构造函数中指定的尽可能多的数据表。因此,数组的索引对应于节点的端口索引。输入的类型是BufferedDataTable,这是 KNIME 分析平台中所有表格数据的标准类型。

表的持久性(例如,当工作流被保存时)由框架自动处理。此外,BufferedDataTable能够处理大于主内存大小的数据,因为如果需要,数据将自动刷新到磁盘。一个表包含DataRow对象,而这些DataCell对象又包含对象。DataCells 提供对数据的实际访问。DataCell所有类型的数据都有很多实现,例如一个DoubleCell包含双精度浮点数的实现(对于实现列表,请查看DataCell类的类型层次结构)。此外,每个DataCell实现一个或多个DataValue接口。这些定义了单元格具有哪些访问方法,即它可以表示为哪些类型。

例如,一个BooleanCell实现IntValue为 一个Boolean可以很容易地表示为 0 和 1。因此,对于每个实现DataValue,可能有几个兼容的DataCell类。该exec方法的第二个参数是ExecutionContext提供创建/修改方法的BufferedDataTable对象并向用户报告执行状态。创建一个新的最直接的方法DataTable是通过createDataContainer(final DataTableSpec spec)的方法ExecutionContext。这将创建一个空容器,您可以在其中添加行。添加的行必须符合DataTableSpec创建数据容器时使用的行。例如,如果容器是使用包含两Double列的表规范创建的,则添加到容器的每一行都必须包含两个DoubleCells. 完成向容器添加行后,通过close()方法关闭它并检索BufferedDataTablewith getTable()。示例代码中也使用了这种创建表的方式(请参阅NumberFormatterNodeModel.java)。

除了创建新的数据容器之外,还有更强大的方法来修改现有的输入表。但是,这些不在本快速入门指南的范围内,但您可以查看ExecutionContext.
该execute方法应返回一个输出BufferedDataTable对象数组,其长度为构造函数中指定的表数。这些表包含节点的输出。

DataTableSpec[] configure(final DataTableSpec[] inSpecs)

该configure方法有两个职责。首先,它必须检查传入的数据表规范是否适合节点根据用户提供的设置执行。例如,用户可能会在节点对话框中禁用某个列类型,那么我们需要根据此设置检查输入表中是否还有适用的列。其次,根据输入计算节点输出的表规范。例如:假设Number Formatter节点获取一个包含两个Double列和一String列的表作为输入。然后这个方法应该返回一个DataTableSpec(不要忘记把它包装在一个数组中)包含两个DataColumnSpec类型String(Double列将被格式化为String,所有其他列都将被忽略)。与该execute方法类似,该configure方法使用输入DataTableSpec对象数组调用,并输出DataTableSpec包含计算表规范的输出对象数组。如果传入的表规范不适合节点执行或不适合用户提供的配置,InvalidSettingsException则为用户抛出带有信息性消息的 。

saveSettingsTo(final NodeSettingsWO settings)

loadValidatedSettingsFrom(final NodeSettingsRO settings)

这些方法处理控制节点行为的设置的加载和保存,即用户在节点对话框中输入的设置。这用于节点模型和节点对话框之间的通信,并在保存工作流时保留用户设置。这两种方法都使用一个NodeSettings对象(在只读 (RO) 和只写 (WO) 版本中)调用,该对象存储设置并管理将它们写入文件或从文件读取它们。该NodeSettings对象是一个键值存储,因此很容易写入或读取设置对象。只需查看NodeSettingsEclipse 编辑器中提供的对象方法即可。在我们的示例中,我们不直接将设置写入NodeSettings对象,因为我们使用SettingsModel对象来存储用户定义的格式字符串。SettingsModel对象已经知道如何从NodeSettings(通过接受的方法NodeSettings)写入和读取设置,并有助于保持模型和对话框之间的设置同步简单。此外,它们可用于创建简单的对话框,其中已经处理了设置的加载和保存。

您可以在类中的方法中找到Number Formatter节点的实际算法。我们鼓励您通读上述类的代码,以更深入地了解节点的所有部分。有关节点应如何行为的更详尽解释,请参阅KNIME 节点指南。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值