使用相同的键但不同的值解析 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|
+---------+------------+--------+--------+
你好,我有 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|
+---------+------------+--------+--------+