我有 Dataframe 如下:
+-----------------------------------------------------------------------------------------------+-----------------------+
|value |timestamp |
+-----------------------------------------------------------------------------------------------+-----------------------+
|{"after":{"id":1001,"first_name":"Sally","last_name":"Thomas","email":"sally.thomas@acme.com"}}|2023-01-03 11:02:11.975|
|{"after":{"id":1002,"first_name":"George","last_name":"Bailey","email":"gbailey@foobar.com"}} |2023-01-03 11:02:11.976|
|{"after":{"id":1003,"first_name":"Edward","last_name":"Walker","email":"ed@walker.com"}} |2023-01-03 11:02:11.976|
|{"after":{"id":1004,"first_name":"Anne","last_name":"Kretchmar","email":"annek@noanswer.org"}} |2023-01-03 11:02:11.976|
+-----------------------------------------------------------------------------------------------+-----------------------+
root
|-- value: string (nullable = true)
|-- timestamp: timestamp (nullable = true)
使用pyspark的预期结果:
+---------+-------------+-------------+-----------------------+
id | first_name | last_name | email |
+---------+-------------+-------------+-----------------------+
1001 | Sally | Thomas | sally.thomas@acme.com |
1002 | George | Bailey | gbailey@foobar.com |
1003 | Edward | Walker | ed@walker.com |
1004 | Anne | Kretchmar | annek@noanswer.org |
如有任何帮助,
2条答案
按热度按时间63lcw9qa1#
你可以使用
pyspark.sql.functions
中的from_json
函数来完成这个操作。这个函数需要定义一个模式,你也可以创建一个模式。这是你的 Dataframe :一个可能的解决方案是这样的:
最后一条
select
语句将嵌套结构展开为单独的字段。使用不同的
pyspark.sql.types
,你可以创建任何类型的模式,接受字段是否为nullable
,等等...更多关于数据类型的信息可以在here中找到。idfiyjo82#
你可以使用pyspark的
from_json
函数来解析JSON字符串(s).该函数需要格式来解析.在你的情况下,你可以得到一个struct的struct.解析后的数据如下所示