java—使用scala将多行日志转换为json

oknwwptz  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(368)

我需要创建一个基于scala的转换,将日志文件(下面的示例)处理为基于json的格式。
“start”和“end”之间的数据总是基于键/值的,并且有有限(~30)个可能的键-所有键都是可选的。

START
FirstName=John
LastName=Parker
City=Sydney
State=NSW
Country=Australia
END
START
FirstName=John
City=Melbourne
Country=Australia
END
START
FirstName=Peter
LastName=Parker
Country=France
END

输出(或转换)格式应如下所示:

[
  {
    "FirstName": "John",
    "LastName": "Parker",
    "City": "Sydney",
    "State": "NSW",
    "Country": "Australia"
  },
  {
    "FirstName": "John",
    "City": "Melbourne",
    "Country": "Australia"
  },
  {
    "FirstName": "Peter",
    "LastName": "Parker",
    "Country": "France"
  }
]

我是scala/spark的新手。不过,到目前为止,我已经能够提出一些逻辑如下

var logBlockMap = new java.util.HashMap[String, String]()
  var full_json_list = new java.util.ArrayList[String]()
  val parsedRDD = dataRDD
    .foreach{
      case "START"=>
        //Initialize data collection
        logBlockMap.clear()
      case "END" =>
        //Add the map data
        val json_string  = mapper.writeValueAsString(logBlockMap)
        full_json_list.add(json_string)
      case line =>
        val newline = line.split("=")
        logBlockMap.put(newline(0), newline(1))
    }

但是,当处理一个大文件时,我很快就会遇到问题,因为完整的\u json \u列表越来越大,而且很快就会崩溃。
解决这个问题的理想方法是什么?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题