【发布时间】:2021-07-01 07:34:53
【问题描述】:
我在一个文件中有以下 json:
{
"code": 0,
"msg": "OK",
"sensors": {
"258443": {
"fieldname": "DeviceStatus2",
"info": "Unlock Request",
"id": 258443,
"work": {
"1623020526": {
"ts": 1623020526,
"te": 1623021124,
"lat": "-25.911997",
"lon": "28.169119"
},
"1623021393": {
"ts": 1623021393,
"te": 1623021453,
"lat": "-25.911997",
"lon": "28.169119"
},
"1623052154": {
"ts": 1623052154,
"te": 1623052783,
"lat": "-25.790348",
"lon": "28.308369"
}
}
},
"258441": {
"fieldname": "Dis1",
"info": "Door",
"id": 258441,
"work": {
"1623021447": {
"ts": 1623021447,
"te": 1623035978,
"lat": "-25.911997",
"lon": "28.169119"
},
"1623052775": {
"ts": 1623052775,
"te": 1623058925,
"lat": "-25.790348",
"lon": "28.308369"
}
}
},
"258442": {
"fieldname": "AnalogInput",
"info": "Lock Fire",
"id": 258442,
"work": {
"1623021453": {
"ts": 1623021453,
"te": 1623021633,
"lat": "-25.911997",
"lon": "28.169119"
},
"1623052783": {
"ts": 1623052783,
"te": 1623052962,
"lat": "-25.790348",
"lon": "28.308369"
}
}
}
}
}
我需要使用 pyspark 将其解析为以下行:
258443,DeviceStatus2,Unlock Request,258443,1623020526,1623021124,-25.911997,28.169119
258443,DeviceStatus2,Unlock Request,258443,1623021393,1623021453,-25.911997,28.169119
258443,DeviceStatus2,Unlock Request,258443,1623052154,1623052783,-25.790348,28.308369
258441,Dis1,Door,258441,1623021447,1623035978,-25.911997,-25.911997
258441,Dis1,Door,258441,1623052775,1623058925,-25.790348,28.308369
258442,AnalogInput,Lock Fire258442,1623021453,1623021633,-25.911997,28.169119
258442,AnalogInput,Lock Fire258442,1623052783,1623052962,-25.790348,28.308369
我曾尝试使用explode 和arrays_zip,但失败了。 如何将此 json 解析为行?
【问题讨论】:
-
欢迎来到 StackOverflow。这不是免费的编码服务。 “我尝试使用explode 和arrays_zip,但失败了。” - 向我们展示该代码。你必须诚实地尝试,然后就你的算法或技术提出一个具体问题。请收下tour、阅读what's on-topic here、How to Ask和question checklist。
-
请解释映射。 JSON 的哪些字段应该出现在您的最终 csv 输出中?
-
顺便说一句,如果您可以更改 JSON 的结构:
sensors和work都应该是列表,而不是结构,并且使用 ID 作为键会使 JSON 的结构发生变化对于每个 ID。您拥有的每个 json 中的键都应该相同。只是价值观应该改变。