问题描述
我需要创建一个基于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",{
"FirstName": "Peter","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))
}
但是,随着full_json_list变得越来越大,事情迅速瓦解,处理大型文件时,我很快遇到了麻烦。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)