【问题标题】:Complex Json schema into custom spark dataframe将复杂的 Json 模式转换为自定义 Spark 数据帧
【发布时间】:2017-11-10 12:38:13
【问题描述】:

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

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

但正如您所见,日期和值字段是数组。我想每条记录有一个元素,并为每条记录复制相应的 regnum。非常感谢任何帮助。

【问题讨论】:

    标签: json scala apache-spark


    【解决方案1】:

    您可以将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)))
    

    【讨论】:

    • 太棒了,工作就像一个魅力。我真的需要提高我的 scala 技能。谢谢。
    • 我又碰到了一个颠簸。如果我有一些记录是 [(Long, Array[String], Array[String])] 和一些是 [(Long,String,String)] 怎么办?如何进行案例映射?再次感谢!
    • 是在同一列吗?
    • 是的,第二列和第三列可能是也可能不是数组,如果是数组,则大小是动态的。
    猜你喜欢
    • 2019-01-16
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2021-12-18
    • 2021-07-02
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多