1.引言
1.1目的
本文档主要预研KNIME节点插件,MVC包装方式原理,研究在流程、节点的交互式操作事件上加入信息推荐埋点,提供节点推荐、参数推荐的规范文档。
1.2概述
KNIME是支持节点扩展的,并提供了相关文档。按照定义标准来实现扩展的节点的开发,并在扩展节点基础上来对节点的推荐、参数推荐进行预研。做了如下工作:实现了节点插件的信息推荐埋点;实现了节点插件的参数推荐初步预研等。
1.3参考文献
【1】《创建新的 KNIME 扩展:快速入门指南》
2.节点插件预研
2.1节点推荐预研
KNIME节点推荐分为社区推荐和服务器推荐,社区推荐即为官方hub,网址https://hub.knime.com/,这个是KNIME官方存储节点和流程库的,里面也会时常更新。社区推荐就根据很多用户使用社区里面节点的频率。服务器推荐是knime-server上存储的节点,在KAP分析平台上可以通过KNIME-Serve的api直接连接到服务器上,可以下载服务器上的节点到KAP分析平台上,它就根据用户在服务上使用的节点频率进行节点推荐,但它推荐的节点只是服务器本地resposity里面现有的节点。
2.1.1工作流节点推荐视图
如下图 2-1 中显示的工作流推荐页面提供了节点建议。如果在工作流编辑器中选择了一个节点,工作流节点推荐视图会显示与当前所选节点相连的使用率最高的节点。这些建议基于关于 KNIME 分析平台中构建的工作流的 KNIME 社区使用统计数据。可以使用与从节点存储库相同的方式,通过拖放或双击将节点从工作流节点推荐试图中添加到工作流编辑器,组成一个可执行的流程。
图2-1 工作流节点推荐视图
2.1.2自定义节点推荐设置
在File → Preferences → KNIME → Workflow Coach下的“Workflow Coach”对话框中自定义节点建议。您有以下三个选项:
通过启用“工作区建议”对话框中的“工作区节点建议”选项,基于当前活动本地工作区中的工作流添加节点建议,如下图2-2所示。
图2-2 工作区建议
通过在“服务器推荐”对话框中选择 KNIME 服务器,根据服务器上的工作流添加节点推荐,如下图2-3所示。
图2-3 服务器推荐
通过取消选中“Workflow Coach”对话框中的社区节点推荐选项,禁用社区节点推荐。
如下图2-4所示。
图2-4 Workflow Coach
2.1.3 KNIME节点推荐原理
经过研究源码,其实现节点推荐原理是工作区中工作流中使用节点的频率。如下图2-5显示节点推荐视图,这里不仅仅有Server端的推荐,还有WorkSpace端即工作台节点推荐。这里着重研究在WorkSpace端的推荐机制。
图2-5 Workflow Coach
找到WorkSpace节点推荐的源码,其目录结构如下图2-6所示
图2-6
这部分代码是获取节点频率的
public Stream<NodeTriple> getNodeTriples() throws IOException {
return NodeFrequencies.from(Files.newInputStream(WORKSPACE_NODE_TRIPLES_JSON_FILE)).getFrequencies().stream();
}
worksapce的节点使用率存在了一个名为workspace_recommendations.json的json文件内,每次更新最自动根据KNIME的工作空间(D:\Users\nn\knime-workspace.metadata\knime)路径找到这个文件,并对其更新,在KAP平台上拖动节点,workflow coach会自动根据最新的json数据来进行节点推荐。
示范流程:
新建一个流程,其中Data Generator为社区的节点,其功能为数字生成器,Test是自定义开发的节点,其功能是可以调整数据保留几位小数。后面两个分别是画直线图和散点图。如下图2-7所示。
首先把在eclipse上自定义开发的节点导出成jar包放到KNIME安装目录下的dropin目录下,打开KNIME分析平台就可以看到该节点了。但是当选中此节点时,此时的workflow coach没有任何推荐的节点,我们执行这个流程并保存,执行完毕会弹出两个图,如2-8,2-9所示。
图2-7
图2-8
图2-9
打开workflow coach配置,点击更新,此时会下载更新一个名为workspace_recommendations.json。里面存储了当前工作区每个节点使用的频率,如下图2-10所示。
图2-10
此时我们再打开workspace_recommendations.json文件,找到node名为Test的节点,可以看出多了两条记录,其中两条记录中节点的后继分别为Scatter Plot和Line Plot,如下图2-11和2-12所示。
图2-11
图2-12
查看workflow coach,由图2-13可以看出Scatter Plot和Line Plot分别为50%,同理社区的节点推荐元也是如此,不过这个每次更新都能远程下载一个节点使用频率的json文件,还有在工作区上,分析平台时如何监视节点的,并算出频率的,这些问题还有待研究。
图2-13
2.2节点插件参数推荐预研
参数推荐指的是节点执行之前的参数配置界面中,在某种场景下能够提供一个初始参数的推荐,或许某个参数值发生改变其他参数会根据这种变化来调整参数。实现一个智能化参数推荐场景。
3.信息埋点
3.1新建自定义节点模板
此步骤参考文档《节点定义标准》。
3.2找埋点
按照教程,新创建的节点应具有以下java类,如图3-1所示。
图3-1
NumberFormatterNodeFactory.java
该NodeFactory捆绑组成一个节点的所有部件。因此,工厂提供了创建方法NodeModel,NodeDialog和NodeView。此外,工厂将通过 KNIME扩展点注册,以便框架可以发现节点,并将显示在 KNIME 分析平台的节点存储库视图中。此文件的注册发生在plugin.xml。
NumberFormatterNodeModel.java
该NodeModel包含实际执行什么样的节点应该做的事。此外,它指定节点的输入和输出数量。在这种情况下,节点模型实现了实际的数字格式。
NumberFormatterNodeDialog.java
该NodeDialog规定在配置(双击)在KNIME分析平台的一个节点打开的对话框窗口。它为用户提供了一个 GUI 来调整节点特定的配置设置。在Number Formatter节点的情况下,这只是一个简单的文本框,用户可以在其中输入格式字符串。另一个示例是文件读取器节点的文件路径。
NumberFormatterNodeView.java
NodeView 提供节点输出的视图。在Number Formatter节点的情况下,将没有视图,因为输出是一个简单的表格。通常,视图的示例可以是创建决策树模型的节点的树视图。
由上述可知,我们主要在NumberFormatterNodeModel.java里面找埋点,并添加埋点。
3.3添加埋点
在saveSettingTo添加埋点
@Override
protected void saveSettingsTo(final NodeSettingsWO settings) {
/* * Save user settings to the NodeSettings object. SettingsModels already know how to * save them self to a NodeSettings object by calling the below method. In general, * the NodeSettings object is just a key-value store and has methods to write * all common data types. Hence, you can easily write your settings manually. * See the methods of the NodeSettingsWO. */
m_numberFormatSettings.saveSettingsTo(settings);
}
saveSettingTo方法是在打开流程、保存流程和修改流程节点参数并保存时会触发。当然saveSettingTo类还有其他埋点,比如还有loadValidatedSettingsForm类和validateSettings类等等。
因此我将想要实现的一些逻辑可以写在saveSettingsTo方法体内。
对于推荐节点的逻辑,我的思路是;
3.3.1编写解析存放节点推荐的json数据的接口
此处不过多赘述,详见客户端代码···
3.3.2发布到服务器上包装成rest接口,可以远程调用
此处不过多赘述,详见客户端代码···
3.3.3增加埋点,调用接口传入数据
完整代码:
@Override
protected void saveSettingsTo(final NodeSettingsWO settings) {
/* * Save user settings to the NodeSettings object. SettingsModels already know how to * save them self to a NodeSettings object by calling the below method. In general, * the NodeSettings object is just a key-value store and has methods to write * all common data types. Hence, you can easily write your settings manually. * See the methods of the NodeSettingsWO. */
System.out.println("saveSettingsTo");
try {
LOGGER.fatal(printJson());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//这里拿到路径
//拿到最新修改的流程信息,并打印
String workflowInfo = (String) sortFile.getLastDir().get(0);
LOGGER.fatal(workflowInfo);
System.out.println(workflowInfo);
//拿到最新修改流程的修改时间
Date lastUpdateTime = (Date) sortFile.getLastDir().get(1);
LOGGER.fatal(lastUpdateTime);
System.out.println(lastUpdateTime);
//String path = "E:\\Users\\nn\\runtime-KNIME"+"\\"+workflowInfo;
String path = "E:\\Users\\nn\\knime-workspace"+"\\"+workflowInfo;
//E:\Users\nn\knime-workspace
LOGGER.fatal(nodeSurroundInfo.getFile(path, 0));
System.out.println(nodeSurroundInfo.getFile(path, 0));
m_numberFormatSettings.saveSettingsTo(settings);
}
4.发布节点
在Eclipse中使用可部署插件和片段向导创建dropin。dropin只是一个包含扩展名的.jar文件,只需将其放入Eclipse Dropins文件夹中即可安装。
要创建dropin包含您的扩展程序,在Eclisep中依次点击File → Export → Plug-in Development → Deployable plug-ins and fragments并单击下一步。打开的对话框将显示工作区中可部署插件的列表。选中旁边的复选框org.knime.examples.numberformatter。在对话框底部,您可以选择导出方法。选择Directory并提供您要将插件导出到的文件夹的路径。最后点击完成,如下图4-1所示。
图4-1
注意最终要将导出的jar放到KNIME安装目录dropins目录下。重启KNIME在左下角节点仓库就能看到自定义的节点。如图4-2所示:
图4-2
5.实现
重启KNIME Analytics Platform,可以看到我们发布的自定义扩展节点Test,如下图5-1所示。
图5-1
推荐信息从控制台成功打印,和KNIME本身的推荐信息一致。当然还包括一些流程信息,如:流程名、流程最后修改时间、流程节点列表。
今天的文章KNIME节点推荐预研与自定义实现分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/27099.html