通过将列值作为列名来分解JSON字符串

eblbsuwk  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(192)

我试图在pyspark中分解一个json字符串,并将一个列的值作为列名。在我的 Dataframe 中,我有JSON字符串,如下所示:

{"AA02": {"param": "F7VH", "value": "QP3"}}
{"AA01": {"param": "F7VH", "value": "CKA"}}

我需要从这个列生成一个JSON文件,就像

{
    "AA02": {
        "param": "F7VH",
        "value": "QP3"
    },
    "AA01": {
        "param": "F7VH",
        "value": "CKA"
    }
}

我尝试了很多方法,比如旋转,使用模式的to_json。但没有什么能帮助我解决这个问题。我正在考虑一种方法,将整个列的值作为JSON,并创建一个新的 Dataframe ,如:

df_new = df.select(col("to_json"), json_tuple(col("to_json"), "param", "value")).toDF("id", "param","value")

这一回,

有没有什么方法可以只使用PySpark来实现这一点,或者我应该使用vanilla python来实现这一点?

ulydmbyx

ulydmbyx1#

您正在尝试从嵌套的JSON中提取值,因此需要在应用json_tuple之前获取嵌套的JSON。

df = (df.withColumn('col', F.from_json('col', 'map<string, map<string, string>>'))
      .withColumn('col', F.col('col').getItem(F.map_keys('col').getItem(0)))
      .select('id', F.json_tuple(F.to_json('col'), 'param', 'value'))
      .toDF('id', 'param', 'value'))

相关问题