我正在尝试将一个通用的json动态地转换成键值字符串(至少3级嵌套)。e、 g:json:
{
"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”)加载spark
它将key作为json文件名,将json字符串作为值,现在我不知道如何解析json字符串并将其转换为包含key-value结构的字符串列表。另外,要处理不同的模式json ata时间,比如在pairdd中,我们有键作为文件名,值作为jsonstring,所以每个jsonstring都应该转换为该特定文件名的键值,如果有任何想法,请告诉我怎么做
1条答案
按热度按时间3xiyfsfu1#
检查这篇文章的扁平列,我正在使用
explodeColumns
从那个岗位上。使用读取所有json文件
json
功能然后使用explodeColumns
.要获取键、值对中的数据,请检查下面的代码。