将数据框转换为pyspark中的嵌套json对象的数组 [英] Convert dataframe into array of nested json object in pyspark

查看:140
本文介绍了将数据框转换为pyspark中的嵌套json对象的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了如下数据框:

+----+-------+-------+
| age| number|name   |
+----+-------+-------+
|  16|     12|A      |
|  16|     13|B      |
|  17|     16|E      |
|  17|     17|F      |
+----+-------+-------+

如何将其转换为以下json:

How to convert it into following json:

{ 
'age' : 16,  
'values' : [{‘number’: ‘12’ , ‘name’ : 'A'},{‘number’: ‘12’ , ‘name’ : 'A'} ] 
},{ 
'age' : 17,  
'values' : [{‘number’: ‘16’ , ‘name’ : 'E'},{‘number’: ‘17’ , ‘name’ : 'F'} ] 
}

推荐答案

您可以将DF转换为RDD并应用您的转换:

You can convert the DF to RDD and apply your transformations:

NewSchema = StructType([StructField("age", IntegerType())
                           , StructField("values", StringType())
                        ])


res_df = df.rdd.map(lambda row: (row[0], ([{'number':row[1], 'name':row[2]}])))\
    .reduceByKey(lambda x, y: x + y)\
    .map(lambda row: (row[0], json.dumps(row[1])))\
    .toDF(NewSchema)

res_df.show(20, False)

显示res_df:

+---+------------------------------------------------------------+
|age|values                                                      |
+---+------------------------------------------------------------+
|16 |[{"number": 12, "name": "A"}, [{"number": 13, "name": "B"}] |
|17 |[{"number": 17, "name": "F"}, [{"number": 16, "name": "E"}] |
+---+------------------------------------------------------------+

将DF保存为JSON文件:

Saving the DF as JSON File:

res_df.coalesce(1).write.format('json').save('output.json')

这篇关于将数据框转换为pyspark中的嵌套json对象的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆