scala drools and map
2017-02-07 17:49
288 查看
需求,安全检查,例如Linux系统,用户安全检查,配置项检查等,这些检查的规则在Drools里面去实现,数据传送过来即可,
问题:如何定义数据结构,不同的检查项会有不同的数据结构,如何规范呢?
思路:
使用map嵌套的思路,检查的数据输出过来是json的格式发送到kafka,然后sparkstreaming程序直接读取json,然后转为map进行处理。
遇到的问题,一开始代码是使用scala.util.parsing.json.JSON.parseFull(string),这样返回的可能是map[String,Any]
但在drools的rule文件中直接的语言是java,所以需要引入scala.collection.javaconversion._来隐式转换。
但这里的问题是,转换只会完成一层,但json会嵌套,会返回嵌套的map,这样这种方法就不好用了。
折腾了半天,暂时是两层,只是强制转换完成了,这里提一下,java中的object对应scala里面的AnyRef.
vallines=rdd.mapPartitions{jsonStrs=>
valgson=newGson()
jsonStrs.map(x=>{
gson.fromJson(x._2,Class.forName("java.util.Map"))
})
}
问题:如何定义数据结构,不同的检查项会有不同的数据结构,如何规范呢?
思路:
遇到的问题,一开始代码是使用scala.util.parsing.json.JSON.parseFull(string),这样返回的可能是map[String,Any]
但在drools的rule文件中直接的语言是java,所以需要引入scala.collection.javaconversion._来隐式转换。
但这里的问题是,转换只会完成一层,但json会嵌套,会返回嵌套的map,这样这种方法就不好用了。
折腾了半天,暂时是两层,只是强制转换完成了,这里提一下,java中的object对应scala里面的AnyRef.
valjsonstr=scala.io.Source.fromFile(newFile("""C:\git\ccms-analyzer\target\classes\test\jsondemo.txt""")).mkString("") //usegsontoparsejsontomap valgson=newGson() varmap:java.util.Map[String,Object]=newHashMap[String,Object]() map=gson.fromJson(jsonstr,map.getClass)
vallines=rdd.mapPartitions{jsonStrs=>
valgson=newGson()
jsonStrs.map(x=>{
gson.fromJson(x._2,Class.forName("java.util.Map"))
})
}
这个场景还是使用java的库来解析json方便,非常方便的完成了解析,满足了我的要求。
经测试,在drools的rule文件中是可以使用scala的,例如importscala.Predef.Println,就可以在后面使用,这许是他们都是基于JVM的,没有深究。
相关文章推荐
- Map, Map and flatMap in Scala
- CodeForces 641 E.Little Artem and Time Machine(BIT+map)
- Scala的Tuple、Array、Map和文件操作
- A and B and Interesting Substrings(学习利用map容器提高效率的技巧)
- 温故而知新 scala第6讲map,tuple,zip
- map and count
- scala sortBy and sortWith
- [scala--基础]--Map操作2
- MDB: virtual and physical memory map for both kernel and application
- Volume Rendering using CUDA – Trilinear Interp. and Image Color-Map
- Implementing TF×IDF and PageRank Algorithms with MapReduce and Scala
- scala编程系列(5)-scala集set和映射map
- fatal error: concurrent map read and map write
- Scala学习八:Map, Tuple
- Scala and Spark Begin
- map and pair (1)
- Scala for the Impatients---(2)Control Structures and Functions
- Getting Started with Play 2, Scala, and Squeryl
- Scala系列:Map和Tuple
- Performance considerations for keySet() and entrySet() of Map