如何使用pyspark在Apache Spark DataFrame中爆炸嵌套结构?

时间:2018-09-07 14:00:16

标签: apache-spark pyspark apache-spark-sql

我现在已经在网上搜索了两个小时,以找到有关如何使用pyspark爆炸Apache DataFrame中嵌套的struct的任何提示。对于arraymap类型,在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()

enter image description here

您会清楚地看到level_instance_json struct中的嵌套结构。现在,我想拥有的所有这些嵌套结构都爆炸了,以便每个编号的struct(即0123 )新行(编号为0123)。因此,我所有的变量都处于同一级别:

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之类的东西(从列到行)。如何才能做到这一点?

对于我的最后任务,我必须以某种方式遍历所有编号的结构,并且我认为分解嵌套结构会使此方法更有效。如果您还有其他建议,请随时告诉。我在这里感谢任何好的建议。

0 个答案:

没有答案