这个json字符串很长,结构也很复杂,手工构造struct的话不太现实
一开始按如下的方式对数据进行解析
zip文件–》RDD–〉spark.read.json(dataRDD)–〉Dataframe
通过spark.sql(
…
,key1.key2.key3
,…)
可以取到[key1.key2.key3]下的值
但是这个方法有个缺点,对于Array类型的节点,只能取一次,无法循环获取Array内的所有元素
于是准备借助其它json包对RDD内的jsonString进行解析,然后对Array类型的节点进行遍历
参考资料scala解析json —— json4s 解析json方法汇总
开发工具-scala处理json格式利器-json4s
scala解析json —— json4s 解析json方法汇总
scala内置的json处理包
这个包内的解析方法可能没有继承serialization,无法在闭包环境下调用
RDD.map(x=>{
…
})
spark在分发计算任务到executer上时无法序列化对象
此外,用这个包的话,scala语法写起来很不清晰,看这有些绕,在遍历Array类型节点内的元素时写起来很不方便,不如下面fastJson用起来方便
fastJsoncom.alibaba fastjson1.2.47
阿里出品的json处理包
可以在map内调用
RDD.map(x=>{
…
})
对Array类型的节点:jsonParseObject.getJSONArray
对于其它类型的节点:
参考资料Scala【json字符串和json对象互相转换】
Spark通过修改Dataframe的schema给表字段添加注释
学习笔记:spark读取json存在缺失列的问题
Spark采坑记录(一):json格式字符串转化为复杂数据结构
Java 使用fastjson 获取嵌套json
Java 中 JSON 的使用



