【发布时间】:2018-12-09 21:39:00
【问题描述】:
我正在尝试将一些相当复杂的嵌套 json 拆分为更合理的格式,但我正在努力扩展一个在我的数据集中更改名称的键。
我的数据集如下所示:
{
"account": {
"accountID": "test_account",
"name": "abc123",
"checks": {
"abc123": {
"check1": "pass",
"check2": "fail",
"check3": 0
},
"xzy7892": {
"check1": "pass",
"check2": "fail",
"check3": 0,
"result": {
"item1": 1,
"item2": 2
}
},
"foobar11012387": {
"check1": "fail",
"check2": "pass",
"check3": 0,
"result": {
"item1": 1,
"item2": 2
}
}
}
}
}
我无法控制架构,因此只能使用给定的内容。本质上,有效负载被分解为各种检查,但每个检查都有一个唯一的名称(示例有效负载中的 abc123、xzy7892 和 foobar1012387)。
帐户、帐户 ID 和检查键可以直接从数据框中选择。
df2.select(['account.accountID', 'account.checks']).show()
+------------+--------------------+
| accountID| checks|
+------------+--------------------+
|test_account|[[pass, fail, 0],...|
+------------+--------------------+
但我可以比这一点更进一步(即 account.checks.abc123.check1)。最终,我想将这三个检查合理化到数据框中它们自己的行中,但由于检查键发生了变化,我不太确定如何去做。
| accountID | check_name | check1 | check2 | check3 | result |
+-----------|------------|--------|--------|--------|--------|
| test_account | abc123 | pass | fail | 0 | null |
| test_account | xyz7892 | pass | fail | 0 | [1, 2] |
| test_account | foobar11012387 | fail | pass | 0 | [1, 2] |
我希望 DF 看起来类似于上表(我没有展开结果,但我可以更进一步)。我不提前知道测试的名称(即 abc123、xzy7892),它们确实发生了变化,所以也许我需要先构建一个数组。
有什么想法吗?
【问题讨论】:
-
感谢您的帖子,它给了我一些关于我应该去的方向的指示。
标签: json apache-spark pyspark