我有两个Jsons,如下所示。我们的生产系统将多个Jsons聚合成单个文件,如下所示。我的问题是如何拆分单个用逗号分隔的jsons(i,e 1& 2)并从文件中删除3。 1,2和3之间的差异是3没有条件ID
1---{name:string,
actid: string,
data:array<struct>,
conditionId:string
},
2---{name:string,
actid: string,
data:array<struct>,
conditionId:string
},
3---{name:string,
actid:string,
data:array<struct>
}
答案 0 :(得分:1)
如果您有一个包含数据的文本文件
1--- {name:string, actid: string, data:array, conditionId:string }, 2---{name:string, actid: string, data:array, conditionId:string}, 3---{name:string, actid:string, data:array}
如果您希望filter
格式错误的json为3
并将该文件另存为有效的json
文件,那么您可以在spark
中使用以下代码
val data = sc.textFile("path to the malformed input file")
data.flatMap(line => line.split("---"))
.map(array => array.split(","))
.filter(_.length > 3)
.map(array => conditions(array(0).split(":")(1), array(1).split(":")(1), array(2).split(":")(1), array(3).split(":")(1).replace("}", "")))
.toDF()
.write.json("path to output json file")
你应该有一个有效的json文件为
{"name":"string","actid":" string","data":"array","conditionId":"string "}
{"name":"string","actid":" string","data":"array","conditionId":"string"}