8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

将字符串列转换为 json 并在 pyspark 中解析

Awshaf Ishtiaque 2月前

12 0

我的数据框看起来像|ID|Notes|---------------|1|'{\'Country\':\'USA\',\'Count\':\'1000\'}'||2|{\'Country\':\'USA\',\'Count\':\'100...

我的数据框看起来像

|ID|Notes|
---------------
|1|'{"Country":"USA","Count":"1000"}'|
|2|{"Country":"USA","Count":"1000"}|

ID : int
Notes : string

当我使用 from_json 来解析列 Notes 时,它会给出所有 Null 值。我需要帮助将此列 Notes 解析为 pyspark 中的列

帖子版权声明 1、本帖标题:将字符串列转换为 json 并在 pyspark 中解析
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Awshaf Ishtiaque在本站《apache-spark》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 使用 from_json() 函数时,请确保列值完全是字符串格式的 json/dictionary。在您提供的示例数据中,列值 Notes id=1 完全是 json 格式(它是一个字符串,但括在额外的单引号中)。 这就是它返回 NULL 值的原因。 在输入数据框上执行以下代码将产生以下输出。

    df = df.withColumn("Notes",from_json(df.Notes,MapType(StringType(),StringType())))
    

    enter image description here

    您需要更改输入数据,使整个 Notes 列采用相同的格式,即 json/dictionary 作为字符串,仅此而已,因为这是导致问题的主要原因。以下是帮助您解决问题的正确格式。

    | ID | Notes |
    ---------------
    | 1 | {"Country":"USA","Count":"1000"} |
    | 2 | {"Country":"USA","Count":"1000"} |
    

    要将 Notes 列值解析为 pyspark 中的列,您只需使用调用的函数 json_tuple() (无需使用 from_json())。它从 json 列(字符串格式)中提取元素并将结果创建为新列。

    df = df.select(col("id"),json_tuple(col("Notes"),"Country","Count")) \
        .toDF("id","Country","Count")
    df.show()
    

    输出:

    enter image description here

    注意: 如果列值的格式不正确,json_tuple() 也会返回 null(确保列值是 json/dictionary 类型的字符串,没有额外的引号)。

返回
作者最近主题: