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增加埋点,调用接口传入数据

完整代码:

@Overrideprotected 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 blocke.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-workspaceLOGGER.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节点推荐预研与自定义实现相关推荐

  1. robot ride edit 页面不显示_【框架】robot-framework预研

    隔壁组在使用robot framework进行自动化测试,这玩意之前我没接触过,决定来预研一下这个auto test框架. 背景 一个好的框架,背后少不了一个牛逼的团队或组织(金主爸爸),也是判断是否 ...

  2. Jenkins Pipeline预研

    Jenkins Pipeline预研 Jenkins1.x 背景 ​ 在Jenkins1.x版本中,持续集成是通过web UI进行交互的,就是说任务的创建.配置以及任务间的关联关系都是通过页面进行管理 ...

  3. Android平台监听系统截屏方案预研及相关知识点

    最近有个针对系统截屏的需求,所以预研了Android平台上捕获系统截屏的方案. 最直接的方式就是监听手机的系统截屏组合键(电源键+音量下键),但是这种方式实现难度大,且有的机型使用特殊手势进行截屏,兼 ...

  4. Flutter for Web 详细预研

    背景 Google在最新的Google I/O上推出了Flutter for Web,旨在进一步解决一次代码,多端运行的问题.Flutter for Web还处于早期试验版,官方不建议在生产环境上使用 ...

  5. 三大超算军团加速布局 中科曙光E级超算预研项目正式启动

    昨日,中科曙光在其举办的"2016中科曙光技术创新大会(IDIC2016)"上宣布,由其牵头的E级高性能计算机(简称"E级超算")原型系统项目正式发布. (E级 ...

  6. Kanzi自定义插件节点属性、自定义消息以及自定义响应

    创建自定义节点和属性类型 在自定义插件中可以使用自定义属性类型创建自定义节点,可以设置如何显示以及如何让用户与这些节点交互. 在插件工程.hpp文件中,在元类定义之后声明返回元数据的函数: ...st ...

  7. Blazor预研与实战

    背景 最近一直在搞一件事,就是熟悉Blazor,后期需要将Blazor真正运用到项目内.前期做了一些调研,包括但不限于 Blazor知识学习 组件库生态预研 与现有SPA框架做比对 与WebForm做 ...

  8. D3.js的技术预研

    背景 目前团队在可视化图表这里采用的Echarts来展示数据, 类似也是用第三方组件库提供的API,但在有的时候还是满足不了业务百变的需求. 预研目标 • 使用D3技术实现可视化功能 简介 D3是一个 ...

  9. 微信小程序开发技术预研分析报告

    预研背景 本次预研是对微信小程序使用流程及开发技术的研究. 预研目的和意义 本次预研在于了解小程序具体语法.接口功能.具体实现方式等. 预研目标 通过微信小程序的技术研究可实现自主完成小程序的功能开发 ...

最新文章

  1. JavaScript权威Douglas Crockford:代码阅读和每个人都该学的编程
  2. Excel 单元格隐藏
  3. 认认真真推荐9个值得关注的公众号
  4. excrutiating
  5. mac 端口占用_第二章 感受Mac 之美-惊艳从Mac 外设开始,一周后的使用感受
  6. 生成n套数位加减乘除_leetcode 算法汇总(四)位运算
  7. C++学习之路 | PTA乙级—— 1028 人口普查 (20 分)(精简)
  8. 内容分发系统MediaEW:助新闻媒体转投HTML5
  9. mfc之CPtrArray数组
  10. Xcode7 插件制作入门
  11. spring boot(三) 集成mybatis
  12. graphviz安装
  13. 2018最新--Win10屏幕亮度无法调节问题的解决方法
  14. javaScript中的垃圾回收机制
  15. 新手村-数组-P2141 珠心算测验
  16. 光纤模块和光纤收发器匹配问题
  17. 虚拟机Linux共享主机Windows文件夹
  18. 百度地图加载过慢问题
  19. (1)安装Arch系统 - 树莓派Raspberry Pi - Arch Linux(转载)
  20. Android Studio安装过程中的常见问题

热门文章

  1. 贝云cms内容管理系统(thinkphp5.0开源cms管理系统)
  2. pythonjieba情感分析步骤_基于jieba和doc2vec的中文情感语料分类
  3. Cadence OrCAD Capture 框选误选择连线问题解决方法图文教程
  4. 【微语】第十一周(01.25~01.31)
  5. 华为GT Runner测评配件及三方对接全方位提升专业体验
  6. 程序员如果都懂SpringWebFlux框架的话,也不用天天CRUD了
  7. 自我感动式努力的第二天
  8. 快给你的软件加IM聊天功能!
  9. 网赚 +操作网盘项目几个思路
  10. 荣耀逆增长:双品牌下的蓝色急行军