如何使用pyspark从json格式的列中提取值

时间:2021-07-05 13:28:26

标签: json apache-spark pyspark apache-spark-sql

我有一个 pyspark 数据框,其中 json 字符串中有一个列(很长的字符串),它有很多键,我只对其中一个键感兴趣。我可以知道如何提取该键的值吗?

这里是userbehavior列的字符串示例:

[{"num":"1234","Projections":"test", "intent":"test", "Mtime":11333.....}]

我只想提取“Mtime”的值,我尝试使用:

user_hist_df=user_hist_df.select(get_json_object(user_hist_df.userbehavior, '$.Mtime').alias("Time"))

然而它不起作用。

2 个答案:

答案 0 :(得分:1)

您几乎是对的,它不起作用,因为您的 JSON 是一个对象数组。只需更改为:

get_json_object('userbehavior', '$[*].Mtime').alias("Time")

答案 1 :(得分:0)

为了从 json 列中提取,您可以使用 - from_json() 并指定 schema 例如df = df.withColumn("parsed_col", from_json($"Body",MapType(StringType,StringType)))

根据架构解析 json 后 - 只需根据需要提取列

df = df.withColumn("col_1", col("parsed_col").getItem("col_1"))

相关问题