【问题标题】:how to extract value from a column which in json format using pyspark如何使用pyspark从json格式的列中提取值
【发布时间】:2021-09-16 06:52:49
【问题描述】:

我有一个 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"))

但是它不起作用。

【问题讨论】:

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


    【解决方案1】:

    您几乎是对的,它不起作用,因为您的 JSON 是一个对象数组。改成这样:

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

    【讨论】:

    • 它现在可以工作了,但是,我爆炸了我的对象数组,现在它是一个字符串,例如 '{"num":"1234","Projections":"test", "intent":" test", "Mtime":11333.....}' ,它不起作用:(
    • 当它是一个对象数组时,您必须使用$[*].Mtime。如果它是一个对象,那么您的解决方案应该可以工作。创建另一个问题,详细描述你做了什么以及发生了什么
    【解决方案2】:

    为了从 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"))

    【讨论】:

    • 它给出错误 keyType 应该是数据类型
    猜你喜欢
    • 1970-01-01
    • 2019-07-29
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2022-11-11
    • 1970-01-01
    相关资源
    最近更新 更多