scala drools and map

Posted 我的空中楼阁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala drools and map相关的知识,希望对你有一定的参考价值。

需求,安全检查,例如Linux系统,用户安全检查,配置项检查等,这些检查的规则在Drools里面去实现,数据传送过来即可,

问题:如何定义数据结构,不同的检查项会有不同的数据结构,如何规范呢?

思路:

使用map嵌套的思路,检查的数据输出过来是json的格式发送到kafka,然后spark streaming程序直接读取json,然后转为map进行处理。

遇到的问题,一开始代码是使用scala.util.parsing.json.JSON.parseFull(string),这样返回的可能是map[String,Any]

但在drools的rule文件中直接的语言是java,所以需要引入scala.collection.javaconversion._来隐式转换。

但这里的问题是,转换只会完成一层,但json会嵌套,会返回嵌套的map,这样这种方法就不好用了。

折腾了半天,暂时是两层,只是强制转换完成了,这里提一下,java中的object对应scala里面的AnyRef.

        val jsonstr = scala.io.Source.fromFile(new File("""C:\git\ccms-analyzer\target\classes\test\jsondemo.txt""")).mkString("")
        //use gson to parse json to map
        val gson = new Gson()
        var map : java.util.Map[String,Object] = new HashMap[String,Object]()
        map = gson.fromJson(jsonstr, map.getClass)

这个场景还是使用java的库来解析json方便,非常方便的完成了解析,满足了我的要求。

经测试,在drools的rule文件中是可以使用scala的,例如import scala.Predef.Println,就可以在后面使用,这许是他们都是基于JVM的,没有深究。

以上是关于scala drools and map的主要内容,如果未能解决你的问题,请参考以下文章

[Scala][Spark]: transform a column in dataframe, keeping other columns, using withColumn and map [er

Drools 规则取决于来自 JDK Map 的知识(不在非 JDK 类中)

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

Drools 最稳定的版本

Drools学习笔记3—Conditions / LHS—字段约束连接&字段约束操作符

Drools.NET 与 Windows Workflow Foundation (WF)