【发布时间】:2020-11-12 13:56:34
【问题描述】:
给定一个 spark 数据框,该数据框有一列可能包含也可能不包含嵌套的 json 。这个嵌套的 json 是动态的。最终要求是打破 json 并为嵌套 json 中存在的每个键生成一个包含新列的新数据框。
json 是动态的,所以生成的表是动态的。另请考虑数据框包含超过 1 亿条记录。
例如-
输入
------------------------------------------------------------------------
|id |key |type |value
|f9f |BUSI |off |false
|f96 |NAME |50 |true
|f9z |BANK |off |{"Name":"United School","admNumber":"197108","details":{"code":"WEREFFW32","studentName":"Abhishek kumar","doc":"certificate","admId":"3424325328","stat":0,"studentDetails":false} }|
输出:-
--------------------------------------------------------------------------------------------------------------------------
|id |key |type |value |Name | admNumber |code | studentName | doc |admId |stat | studentDetails
+------------------------------------+-----------------+-------------+----------------------------------------------------
|f9f |BUSI |off |false |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |
|f96 |NAME |50 |true |NULL |NULL |NULL |NULL |NULL |NULL |NULL |NULL |
|f9z |BANK |off |NULL |United School |197108 |WEREFFW32 |Abhishek kumar |certificate |3424325328 |0 |false |
【问题讨论】:
-
您的初始数据框是否只有一个 json 列?
-
您希望所有嵌套键都成为列吗? (扁平化?)举个例子输入和输出。
-
如果您不了解架构,则会对性能产生很大影响。或者如果您在一定程度上了解架构之前可以轻松提高性能。
-
@ziad.rida 是的,初始数据框有一个 json 列,所有嵌套键都需要成为列。嵌套 json 的深度不会超过 3 或 4 级。
标签: scala apache-spark apache-spark-sql apache-spark-dataset