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)val lines = rdd.mapPartitions{jsonStrs =>
val gson = new Gson()
jsonStrs.map(x=>{
gson.fromJson(x._2, Class.forName("java.util.Map"))
})
}
这个场景还是使用java的库来解析json方便,非常方便的完成了解析,满足了我的要求。
经测试,在drools的rule文件中是可以使用scala的,例如import scala.Predef.Println,就可以在后面使用,这许是他们都是基于JVM的,没有深究。
scala drools and map的更多相关文章
- Scala中的Map
映射 映射是对偶的集合. 声明映射 映射是对偶的集合. a.声明映射 b.映射中的键值对称作对偶,用( , )表示 c.当映射中不存在key时,取值会报错,解决方案是使用 contains方法,或者g ...
- Scala编程入门---Map与Tuple
创建Map //创建一个不可变的Map val ages = Map("Leo" -> 30,"Jen" ->25,"Jack" ...
- Scala中的Map使用例子
Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法. (1)不可变Map特点: api不太丰富 如果是 ...
- Scala中的Map集合
1. Map集合 1.1 Scala中的Map介绍 Scala中的Map 和Java类似,也是一个散列表,它存储的内容也是键值对(key-value)映射,Scala中不可变的Map是有序的,可变的M ...
- scala 两个map合并,key相同时value相加/相减都可
scala 两个map合并,key相同时value相加 1.map自带的合并操作 2.map函数 2.1示例 2.2合并两个map 3.用foldLeft 3.1 语法 3.2 合并两个map 1.m ...
- Spark记录-Scala数组/List/Map/Set
import Array._ import scala.collection.mutable.Set object DataStructure { def main(args:Array[String ...
- scala中获取Map中key和value的方法
val scores=Map("Alice"->10,"Bob"->3,"Cindy"->8) // 获取所有的key v ...
- 关于scala 集合 List Map Set
1,数组 2,List,ListBuffer 3, Map , mutable.Map
- scala - Map基础
Map 构造Map 不可变: val map = Map("sa" -> 1, "s" -> 2)map("sa") = 3 / ...
随机推荐
- zoj 3362(最大费用)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3904 思路:费用流的题,增加一个超级源点和一个超级汇点,然后就是连边 ...
- 编程之美 set 14 小飞的电梯调度算法
题目 电梯每次上升只停一次, 求问电梯停在哪一楼能够保证乘坐电梯的所有乘客爬楼层的层数之和最小 思路 假设电梯的层数是 m, 乘客人数是 n 1. 枚举, 时间复杂度是 o(mn) 2. 滚动解法. ...
- 解决 Unable to load native-hadoop library for your platform
安装hadoop启动之后总有警告:Unable to load native-hadoop library for your platform... using builtin-java classe ...
- centos7 edit hostname
1.临时修改主机名 hostname 主机名 重新连接shell,就可以,这种方式,只能修改临时的主机名,当重启机器后,主机名称又变回来了. 2.永久修改主机名 hostnamectl set-hos ...
- Animate a custom Dialog,自定义Dialog动画
Inside res/style.xml <style name="AppTheme" parent="android:Theme.Light" /> ...
- java如何遍历Enumeration
public class TestEnumeration{public static void main(String[] args){ Vector v = new Vector(); v.addE ...
- Mybatis 3.1中 Mapper XML 文件 的学习详解(转载)
MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...
- javascript自动识别是否移动设备访问
代码 JavaScript | 复制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function is_pc(){ var os = new Array(& ...
- Oracle之rman常用命令及维护(51CTO风哥rman课程)
list 查看数据库备份的信息 查询数据库对应物 list incarnation; list backup summary; 列出当前备份信息及汇总 B是备份 F是全备 A是归档 第三个A是是否有效 ...
- util 常用方法
C:\Program Files\Java\jdk1.8.0_171\src.zip!\java\lang\System.java /** * Returns the current time in ...