月度归档: 2019 年 3 月

  • Knime中集成Java代码

    Knime中集成Java代码

    Knime是一个非常强大的数据分析平台,支持常用的各种数据清洗,分析等功能。

    但是有些时候数据的预处理,比如打标记等等需要一些外部逻辑,这种时候用java代码可能更快。

    为了让数据处理更流畅,而不是在Knime中输出一个中间结果,然后在放回Knime中继续这样断断续续的方法,Knime提供了各种语言的集成,比如Java,Python等。其中Java代码的集成是原生支持的,而Python等语言是需要安装插件的。

    这里用阿里天池全球城市计算AI挑战赛的数据作为说明。

    假定我们读取文件每次只读取同一天的数据,比如要计算星期二的,就只读取同样为星期二的历史数据。workflows需要用到

    • List Files
    • Java Snippet
    • Rule-based Row Filter
    • Table Row To Variable Loop Start
    • CSV Reader

    其中List Files可以将指定目录的文件全部列出

    然后我们在Java Snippet中写逻辑过滤就行了,这里追加一个星期标识

    // system imports
    import org.knime.base.node.jsnippet.expression.AbstractJSnippet;
    import org.knime.base.node.jsnippet.expression.Abort;
    import org.knime.base.node.jsnippet.expression.Cell;
    import org.knime.base.node.jsnippet.expression.ColumnException;
    import org.knime.base.node.jsnippet.expression.TypeException;
    import static org.knime.base.node.jsnippet.expression.Type.*;
    
  • Docker Hub镜像构建测试

    Docker Hub提供了镜像构建服务,特别是和代码仓库关联起来的时候可以自动构建最新的镜像,这个功能可以保证你的镜像时刻是最新的。

    但是有时候构件本身可能是成功的,比如你成功生成了相关的jar,并放到了合适的运行容器中,但是可能由于第三方依赖或其他原因导致你的镜像其实并不能正常工作。

    人工验证可以发现问题,但是这里使用Docker Hub提供的测试服务更加快捷。

    我们以dubbo-admin为例,这是一个非常标准的Spring Boot项目,构建以后生成jar包可以直接运行。而我们的测试目标就是构建出的镜像可以正常对外提供服务,这里我们检测swagger文档地址是否返回200。不同的项目可以使用不同的检测标准。

    首先添加一个检测脚本test.sh

    LOOP_SIZE=60
    i=0
    
    while [[ $i -lt LOOP_SIZE ]]; do
    	status_code=$(curl --write-out %{http_code} --silent --output /dev/null http://admin:8080/swagger-resources)
    
      if [[ "$status_code" -eq 200 ]] ; then
        echo "Tests passed!"
        exit 0
      else
        curl -v