我现在已经在网上搜索了两个小时,以找到有关如何使用pyspark爆炸Apache DataFrame中嵌套的struct
的任何提示。对于array
和map
类型,在explode()
中存在函数pyspark.sql.functions
,但是对于struct
类型,这种功能不是可用(虽然会是一个不错的功能)。
这是我的问题:
我有一个看起来如下的DataFrame:
newJSON = '{"level_instance_json":{"events":{"0":{"id":1,"visible":true},"1":{"id":2,"visible":true},"2":{"id":1,"visible":false},"3":{"id":2,"visible":false}}},"user_id":"a1"}'
newJSON2 = '{"level_instance_json":{"events":{"0":{"id":1,"visible":true},"1":{"id":2,"visible":true},"2":{"id":1,"visible":false},"3":{"id":2,"visible":false}}},"user_id":"b2"}'
dfJSON = spark.read.json( sc.parallelize( [newJSON, newJSON2] ) )
dfJSON.printSchema()
您会清楚地看到level_instance_json
struct
中的嵌套结构。现在,我想拥有的所有这些嵌套结构都爆炸了,以便每个编号的struct
(即0
,1
,2
,3
)新行(编号为0
,1
,2
,3
)。因此,我所有的变量都处于同一级别:
event_id | id | visible | user_id
0 1 true a1
1 2 true a1
2 1 false a1
3 2 false a1
0 1 true b2
1 2 true b2
2 1 false b2
3 2 false b2
它可能首先是一种exlode
,然后是transpose
之类的东西(从列到行)。如何才能做到这一点?
对于我的最后任务,我必须以某种方式遍历所有编号的结构,并且我认为分解嵌套结构会使此方法更有效。如果您还有其他建议,请随时告诉。我在这里感谢任何好的建议。