这个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 解析json方法汇总
json4s
scala内置的json处理包
这个包内的解析方法可能没有继承serialization,无法在闭包环境下调用
RDD.map(x=>{
…
})
spark在分发计算任务到executer上时无法序列化对象
此外,用这个包的话,scala语法写起来很不清晰,看这有些绕,在遍历Array类型节点内的元素时写起来很不方便,不如下面fastJson用起来方便
fastJson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
阿里出品的json处理包
可以在map内调用
RDD.map(x=>{
…
})
对Array类型的节点:jsonParseObject.getJSONArray
对于其它类型的节点:
参考资料
Spark通过修改DataFrame的schema给表字段添加注释