我需要创建一个基于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列表越来越大,而且很快就会崩溃。
解决这个问题的理想方法是什么?
暂无答案!
目前还没有任何答案,快来回答吧!