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的,没有深究。

时间: 2024-10-21 22:05:29

scala drools and map的相关文章

Scala编程入门---Map与Tuple

创建Map //创建一个不可变的Map val ages = Map("Leo" -> 30,"Jen" ->25,"Jack" ->23) ages("Leo") =31 //创建一个可变的Map val ages =scala.collection.mutable.Map("Leo" ->30,"Jen" ->25,"Jack" -&

Scala中的Map和Set

Map和Set中常用的一些方法. var jetset = Set("one","two") jetset += "three" println(jetset.contains("four")) println(jetset.contains("three")) jetset.foreach(arg => println(arg)) print(jetset.size) import scala.co

Scala系列:Map和Tuple

Map 构造Map 不可变: val map = Map("sa" -> 1, "s" -> 2)map("sa") = 3 // error val emptyMap = new scala.collection.immutable.HashMap[String, Int] 可变: val map2 = scala.collection.mutable.Map("sa" -> 2)map2("sa

scala中的map函数与for中的yield

首先我们从scala的函数开始: 在命令后输入:(x:Int) => x * 2 这种奇怪的格式让我们陌生,但是如果你熟悉javascript的函数如下: function myfunc(param){ alert("hello" + param); } 这是一个弹出窗口hello的函数,显示的是hellp+输入参数,这个param不只是可以传入值,也可以传入另外一个函数,为了能够传入另外一个函数作为参数,被传入的函数在写法上要改变一下,比如: var myfunc2 = fun

Scala learning(2): map, flatMap, filter与For表达式

本文叙述Collections里最常见的三种操作map, flatMap, filter,与For表达式的关系. List对三种方法的实现 map在List的实现: abstract class List[+T] { def map[U](f: T => U): List[U] = this match { case x :: xs => f(x) :: xs.map(f) case Nil => Nil } } flatMap在List的实现: abstract class List[

scala基础(1) -- map

creates Map val weights = Map("cat" -> 10, "elephant" -> 200000) val weight = weights("elephant") println(weight) val colors = Map(("bird", "blue"), ("fox", "red")) val result1 =

Scala之Map,Tuple

/** * 1,默认情况下Map构造的是不可变的集合,里面的内容不可修改,一旦修改就变成新的Map,原有的Map内容保持不变: * 2,Map的实例是调用工厂方法模式apply来构造Map实例,而需要主要的是Map是接口,在apply中使用了具体的实现: * 3,如果想直接new出Map实例,则需要使用HashMap等具体的Map子类: * 4,查询一个Map中的的值一定是采用getOrElse的语法的,一方面是在key不存的情况下不报告异常,另外还有一个神奇的作用就是提供默认值 * 而关于默认

Scala 深入浅出实战经典 第40讲:Set、Map、TreeSet、TreeMap操作代码实战

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2 技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群 DT大数据梦工厂① :462923555 DT大数据梦工厂②:437123764 DT大数据梦工厂③

scala的 collect和map

Scala 中的 map 与 collect团队号 ScalaFans 作者 张逸原文链接 在Scala中,当我需要对集合的元素进行转换时,自然而然会使用到map方法.而当我们在对tuple类型的集合或者针对Map进行map操作时,通常更倾向于在map方法中使用case语句,这比直接使用_1与_2更加可读.例如: val languageToCount = Map("Scala" -> 10, "Java" -> 20, "Ruby"