从 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"}|
#+------------------+
我在包含 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"}|
#+------------------+