zoukankan      html  css  js  c++  java
  • 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:gitccms-analyzer	argetclasses	estjsondemo.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的,没有深究。

  • 相关阅读:
    js过滤HTML标签以及 
    Sharepoint的web.config配置
    javascript 动态添加div等这样的标签包含一些元素
    SPMetal 日志导出Caml语句
    sitepage applicationPage 区别
    exchange部署的好处
    SPSiteDataQuery不完全使用手册
    WP7 开发(十二) WebBrowser控件
    WP7 开发(十一) Web Task
    WP7 开发(十四) ApplicationBar
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/6375279.html
Copyright © 2011-2022 走看看