从 json 字符串中排除列?

Exclude column from json string?

我在包含 json 的数据框中有一个字段。有没有办法从 json 中排除某些列?

输入:

{"column1":"data", "column2":"data"}

预期输出:

{"column1":"data"}

您可以使用 from_json 函数将 json 转换为 MapType,过滤地图以排除您想要的列,然后使用 to_json 转换回 json:

import pyspark.sql.functions as F

df = spark.createDataFrame([('{"column1":"data", "column2":"data"}',)], ["json_col"])

cols_to_exclude = ["column2"]

df1 = df.withColumn(
    "json_col",
    F.from_json("json_col", "map<string,string>")
).withColumn(
    "json_col",
    F.to_json(
        F.map_filter("json_col", lambda k, v: ~k.isin(cols_to_exclude))
    )
)

df1.show()
#+------------------+
#|          json_col|
#+------------------+
#|{"column1":"data"}|
#+------------------+