PySpark中MapType转StringType保留JSON格式的实现方法
解决PySpark中MapType转StringType保留JSON格式的问题
问题场景
使用geojson_to_dataframe将GeoJSON文件转换为PySpark DataFrame后,properties列被识别为MapType类型。直接通过.cast(StringType())转换时,会出现格式丢失:
- 转换前MapType内容:
{ "BFE_LN_ID":"01001C_722", "DFIRM_ID":"01001C", "NAME":"Alabama", "ALAND":"131185042550", }
- 转换后错误的StringType内容:
[ BFE_LN_ID->01001C_722, DFIRM_ID->01001C, NAME->Alabama, ALAND->131185042550, ]
解决方案
不要直接用cast转换,改用PySpark内置的to_json函数,它能将MapType序列化为标准JSON格式的字符串。
修改后的代码:
from pyspark.sql.functions import to_json def nfhl_string(nfhl): df = nfhl.select(to_json(nfhl.properties).alias("properties")) return df
原理说明
cast(StringType())只是将Map的内部字符串表示(类似[key->value]格式)直接转为文本,而to_json会按照JSON规范对Map进行序列化,自动保留键值对的引号、冒号等格式,完全还原原始JSON结构。
内容的提问来源于stack exchange,提问作者Deeba Yavrom
相关产品推荐
相关产品推荐

