上一篇文章中,我们介绍了如何在HuggingFists系统中复用流程。如何定义流程,接收外部数据流以及写出数据流。通过接收和写出数据流实现流程的嵌套引用。在实际的应用场景中,被引用的子流程除了需要与主流程的数据流进行交互外,有时其流程内部的算子参数也需要由主流程在引用时进行设定,以适用不同的流程应用需求。比如一个基于时间段检索数据库的流程,其时间段信息就可当作参数供主流程使用时指定。下面我们就介绍下,如何为子流程定义可供主流程设定的参数信息。
定义流程参数
我们仍然使用上一篇文章中介绍的子流程示例,进行少许改造,流程图如下:
该流程仍表达了对输入的数据流添加一个列,并将数据流输出。不同之处在于图中右侧的蓝色框部分。这里没有为添加的列给出明确的名字,而是以${col}的变量形式进行了代替。”${变量名}”为HuggingFists的变量表达式,允许使用者在执行流程的时候为其赋值,而不必在流程定义时就明确其值。看流程左下部的蓝色框部分,当使用者在算子属性部分填充入变量表达式时,就会在“变量”页自动添加一个变量,可为其设置显示名及缺省值。这里的变量就是流程暴露给外部的可定义参数。流程定义完成,发布流程,供其它流程引用。
引用流程
我们调整上篇文章中用到的主流程,使其本次引用新版本的子流程。如下图:
该流程仍然是读取相同的csv文件并使用引用的“子流程”为其添加一列。需要注意的是图中的蓝框部分,这次我们引用的子流程的版本为0.2版,之前我们使用的是0.1版。这次的子流程有了一个名为col的参数,该参数表达了我们要添加的列名。其缺省值为”column1”, 这里我们将其设置为”column2”。观察仔细的读者应该会发现,我们在为变量赋值时总是为这个值的两端加上”单引号”。这是因为,加上单引号后,该值表示一个字符串;而不加时则表示的是一个数据流中的列的名字。看过其它HuggingFists的应用介绍文章的读者会记得,HuggingFists是支持用列名作为参数来设置参数值的。当使用了列名做参数时,表示的是对数据流中该列的值进行处理。而这个场景是为增加的列起一个名字,该名字应该是一个字符串,所以在这里为参数赋值时,为其两端加了单引号。
流程定义完成,执行看一下效果:
我们可以看到,输出结果添加的列名为”column2”,为我们在主流程中设定的列名。子流程按照主流程设定的列名进行了列添加。
HuggingFists系统关于流程复用的相关知识到这里就基本介绍完了。另外,HuggingFists系统对于流程的复用嵌套层次没有深度的限定,理论上可以像使用编程语言的函数一样,根据使用需要自由嵌套。
HuggingFists的流程引用、复用能力能够极大的帮助使用者积累知识、复用知识、提升效率,快来试一试吧。