Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Json解析动态激发为键值字符串_Json_Scala_Apache Spark_Parsing_Pyspark - Fatal编程技术网

将Json解析动态激发为键值字符串

将Json解析动态激发为键值字符串,json,scala,apache-spark,parsing,pyspark,Json,Scala,Apache Spark,Parsing,Pyspark,我正在尝试将通用json动态转换为键值字符串(至少3级嵌套)。 例如: Json: 结果:键值字符串类似于: 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=

我正在尝试将通用json动态转换为键值字符串(至少3级嵌套)。 例如: Json:

结果:键值字符串类似于:

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”)

这让我将key作为json文件名,将json字符串作为值,现在我不知道如何解析json字符串并将其转换为包含key-value结构的字符串列表。 另外,要处理不同的模式json ata时间,就像在pairdd中一样,我们将键作为文件名,将值作为jsonstring,因此每个jsonstring应该只转换为该特定文件名的键值 让我知道如果有任何想法我可以这样做,我使用的是那篇文章中的
explodeColumns

使用
json
函数读取所有json文件,然后使用
explodeColumns

val df = spark.read.json("/your/json/directory/").explodeColumns
要获取键、值对中的数据,请检查下面的代码

df.select(map(df.columns.flatMap(c => Seq(lit(c),col(c))):_*).as("map")).show(false)


您使用的是python还是scala?任何语言都可以使用python、scala或Java。您可以根据自己的要求检查此post-&更改。这很有帮助,但它以表格格式提供所有数据,而不是键值类型,我的意思是,我的表中只有两列(键、值),我认为在此之后,转置将有所帮助,有什么想法吗?一旦你得到了表格格式,你就可以将这些列移动到映射中,你将得到作为键、值的数据。我得到了一些数据类型不匹配的错误:由于数据类型不匹配:函数映射的给定值都应该是相同的类型,但它们是相同的[string,string,string,string,bigint,string,boolean,string,boolean,string,string,string,bigint,string,string,string,boolean,string,string,boolean,string];还有一件事,我可以用生成的键映射文件名。是的,映射应该包含相同的数据类型。我认为必须将所有数据类型转换为字符串。
df.select(map(df.columns.flatMap(c => Seq(lit(c),col(c))):_*).as("map")).show(false)