一种方法是使用
我有一个数据帧,列model_code为字符串类型,我必须将列转换为model.code,当我打印df.toJSON()
时,它是{"model.code":"xyz"}
,但我需要打印类似于-{"model":{"code":"xyz"}}
的json。如何使用pyspark或panda来实现这一点?
示例数据帧:
model.code | model.name |
---|---|
700 | 桌面 |
250 | 片剂 |
toJSON()
,然后在输出RDD上使用map
来操作JSON字符串。
df = spark.createDataFrame(data=[(700, 'Desktop'), (250, 'Tablet')], schema = ['model.code', 'model.name'])
>>> df.show()
+----------+----------+
|model.code|model.name|
+----------+----------+
| 700| Desktop|
| 250| Tablet|
+----------+----------+
>>> import json
>>> df.toJSON()
... .map(lambda x: json.loads('{"model":'+x.replace('model.','')+'}'))
... .collect()
[{'model': {'code': 700, 'name': 'Desktop'}}, {'model': {'code': 250, 'name': 'Tablet'}}]
您需要构造嵌套的struct
,然后使用to_json
函数转换为json字符串。
df = df.select(F.collect_list(F.to_json(
F.struct(F.struct(F.col('`model.code`').alias('code'), F.col('`model.name`').alias('name')).alias('model'))))
)
df.show(truncate=False)