【问题标题】:How to convert Jsonstring column in pyspark dataframe to jsonobject?如何将pyspark数据框中的Jsonstring列转换为jsonobject?
【发布时间】:2021-11-17 05:08:21
【问题描述】:

我的 pyspark 数据框中有一个带有 jsonstring 的列,并试图摄取到 cosmos DB。由于字符串类型,jsonstring 用 "\" cosmos db 转义。将此列类型从字符串转换为 json 对象的最佳方法是什么?

带有 jsonstring 的数据框列 -

[{"日期":"2020 年 11 月 13 日下午 3:23:21","Ids":"[]","col2":"abc","col3":"","value3" :"[]","currency":"","status":"Active","tag":"[]","Info":"[]"}]

迁移 cosmos db 后,该值变为

[{\"日期":\"2020 年 11 月 13 日下午 3:23:21\",\"Ids\":\"[]\",\"col2\":\"abc\" ,\"col3\":\"\",\"value3\":\"[]",\"currency":\"\",\"status":\"Active\",\"tag": \"[]\",\"信息\":\"[]\"}]

感谢您的帮助!

【问题讨论】:

    标签: python apache-spark pyspark azure-cosmosdb azure-synapse


    【解决方案1】:

    如果您想在数据框中创建 json 对象,请使用 collect_list + create_map + to_json 函数。

    以下是示例供参考:

    Create JSON object:

    df.agg(collect_list(create_map(lit("product"),"product",lit("cost"),"cost")).alias("stru")).\  
    selectExpr("to_json(stru) as json").\  
    show(10,False)
    
    #+-------------------------------------------------------------------------------------------------------------------------------+  
    #|json |  
    #+-------------------------------------------------------------------------------------------------------------------------------+  
    #|[{"product":"pen","cost":"10"},{"product":"book","cost":"40"},{"product":"bottle","cost":"80"},{"product":"glass","cost":"55"}]|  
    #+-------------------------------------------------------------------------------------------------------------------------------+
    
    #write to hdfs use .saveAsTextFile  
    df.agg(collect_list(create_map(lit("product"),"product",lit("cost"),"cost")).alias("stru")).selectExpr("to_json(stru) as json").rdd.map(lambda x:x['json']).saveAsTextFile("<path>")
    
    #cat part-00000  
    #[{"product":"pen","cost":"10"},{"product":"book","cost":"40"},{"product":"bottle","cost":"80"},{"product":"glass","cost":"55"}]
    

    这里是参考SO线程

    【讨论】:

    • 感谢 Venkatesh 的回复!我的 Jsonstring 具有接近 30 多个属性,我很难在上述选项中将所有属性转换为 jsonobject。由于这个 jsonstring 已经是存储为字符串的正确 jsonobject,pyspark 中是否有可用的列数据类型转换,可以在这里使用?我在数据框中还有其他列(jsonstring 除外)
    猜你喜欢
    • 2018-01-06
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多