使用相同的键但不同的值解析 json

Parse json with same key but different values

你好,我有 json,看起来像这样:

json={'Cells': [{'Value': 'Total Assets'},
                {'Value': '24203.13'},
                {'Value': '5438.48'}]}

在将此 json 解析为数据框时,我得到下一列

   | Value  |
   ----------
   Total Assets
   24203.13
   5438.48

但我想通过下一种方式获得 table:

  | Total Assets | 24203.13 | 5438.48 |

如何从我的 json 创建这样的 table?

这可能是适合您的解决方案..

因为您已经解析了 json 文件,从那里获取它,创建一个虚拟列以便分组并使用 collect_list() 来将所有元素组合在一个列中。然后取出你选择的每一个元素

在此处创建数据框

json={'Cells': [{'Value': 'Total Assets'},
                {'Value': '24203.13'},
                {'Value': '5438.48'}]}
df = spark.createDataFrame([(json)])
df.show(truncate=False)
df = df.withColumn("array_col", F.explode("Cells"))
df = df.withColumn("Value", df.array_col.getItem("Value"))
df.show(truncate=False)
df_grp = df.withColumn("dummy_col", F.lit(1))
df_grp = df_grp.groupBy("dummy_col").agg(F.collect_list("Value").alias("Value"))
df_grp.select("dummy_col", df_grp.Value[0],df_grp.Value[1],df_grp.Value[2]).show()

输入

+------------------------------------------------------------------+
|Cells                                                             |
+------------------------------------------------------------------+
|[[Value -> Total Assets], [Value -> 24203.13], [Value -> 5438.48]]|
+------------------------------------------------------------------+

JSON 解析后的中间输出

+------------------------------------------------------------------+-----------------------+------------+
|Cells                                                             |array_col              |Value       |
+------------------------------------------------------------------+-----------------------+------------+
|[[Value -> Total Assets], [Value -> 24203.13], [Value -> 5438.48]]|[Value -> Total Assets]|Total Assets|
|[[Value -> Total Assets], [Value -> 24203.13], [Value -> 5438.48]]|[Value -> 24203.13]    |24203.13    |
|[[Value -> Total Assets], [Value -> 24203.13], [Value -> 5438.48]]|[Value -> 5438.48]     |5438.48     |
+------------------------------------------------------------------+-----------------------+------------+

最终输出

+---------+------------+--------+--------+
|dummy_col|    Value[0]|Value[1]|Value[2]|
+---------+------------+--------+--------+
|        1|Total Assets|24203.13| 5438.48|
+---------+------------+--------+--------+