【发布时间】:2021-02-27 08:00:21
【问题描述】:
我正在尝试将通用 json 动态转换为键值字符串(至少 3 级嵌套)。 例如: 杰森:
{
"a": {
"d": "1",
"e": "2",
"f": "3",
"g": {
"h": [{
"i": "4",
"j": "5",
"k": "6",
"l": true,
"m": true,
"n": 1821,
"o": false
}, {
"i": "7",
"g": "8",
"l": false,
"m": false,
"o": false
}]
},
"l": false
},
"b": {
"p": {
"q": {
"h": [{
"i": "7",
"g": "8",
"l": false,
"m": false,
"o": false,
"r": "FALSE"
}, {
"i": "4",
"j": "5",
"k": "6",
"l": true,
"m": true,
"n": 1821,
"o": false,
"r": "FALSE"
}]
}
},
"s": [{
"t": {
"u": ["xxx:*"],
"v": "333",
"w": "10"
}
}],
"x": [{
"y": "DEFAULT"
}]
},
"c": {
"z": "100",
"zz": "2020-11-06T07:15:25.836Z"
}
}
结果:键值字符串类似于:
a.d=1
a.e=2
a.f=3
a.g.h.i=4
a.g.h.j=5
a.g.h.k=6
a.g.h.l=True
a.g.h.m=True
a.g.h.n=1821
a.g.h.o=False
a.g.h.i=7
a.g.h.g=8
a.g.h.l=False
a.g.h.m=False
a.g.h.o=False
a.l=False
b.p.q.h.i=7
b.p.q.h.g=8
b.p.q.h.l=False
b.p.q.h.m=False
b.p.q.h.o=False
b.p.q.h.r=FALSE
b.p.q.h.i=4
b.p.q.h.j=5
b.p.q.h.k=6
b.p.q.h.l=True
b.p.q.h.m=True
b.p.q.h.n=1821
b.p.q.h.o=False
b.p.q.h.r=FALSE
b.s.t.u=["xxx:*"]
b.s.t.v=333
b.s.t.w=10
b.x.y=DEFAULT
c.z=100
c.zz=2020-11-06T07:15:25.836Z
这里的键可能是任何东西,所以不能使用键的硬编码字符串值来解析。 我尝试通过 rdd = spark.sparkContext.wholeTextFiles("s3:///jsontest/*.json")
这给了我作为 json 文件名和 json 字符串作为值的键,现在我不知道如何解析 json 字符串并将其转换为包含键值结构的字符串列表。 此外,想要在pairRDD中处理不同的模式json,我们将键作为文件名,将值作为jsonstring,所以每个jsonstring都应该只转换为该特定文件名的键值 让我知道我该怎么做
【问题讨论】:
-
你用的是python还是scala?
-
任何语言都可以使用 python、scala 或 java
-
您可以查看此帖子 - stackoverflow.com/questions/61863489/… 并根据您的要求进行更改
-
这有帮助,但它为我提供了表格格式的所有数据,而不是键值类型,我的意思是我的表中只有两列(键,值)我认为在此之后转置会有所帮助,任何想法?
-
获得表格格式后,您可以将这些列移动到地图中,您将获得数据作为键、值。
标签: json scala apache-spark parsing pyspark