将复杂的Json模式转换为自定义spark数据帧

时间:2017-11-09 22:54:04

标签: json scala apache-spark

好的,我从API调用中获取了一个大的Json字符串,我想将一些字符串保存到Cassandra中。我试图将Json字符串解析为更像表格的结构,但只有一些字段。整体架构如下所示:

printSchema()

我希望我的表结构使用regnum,date和value字段。 使用sqlContext.read.json(vals).select(explode('register) as 'reg).select("reg.@attributes.regnum","reg.data.date","reg.data.value").show我可以得到这样的表:

table

但是你可以看到日期和值字段是数组。我想每个记录有一个元素,并为每个记录复制相应的regnum。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以将DataFrame转换为Dataset,然后flatMap

 df.select("reg.@attributes.regnum","reg.data.date","reg.data.value")
   .as[(Long, Array[String], Array[String])]
   .flatMap(s => s._2.zip(s._3).map(p => (s._1, p._1, p._2)))