Как взорвать вложенную структуру в Apache Spark DataFrame с помощью pyspark? - PullRequest
0 голосов
/ 07 сентября 2018

Я искал пару часов в сети, чтобы найти подсказку о том, как взорвать вложенный struct в Apache DataFrame с использованием pyspark. Для типов 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()

enter image description here

Вы четко видите вложенную структуру в 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 (от столбца к строке). Как это может быть сделано?

Для моей последней задачи мне нужно как-то пройтись по всем пронумерованным структурам, и я предполагаю, что взрыв вложенных структур делает это более эффективным. Если у вас есть другие предложения, не стесняйтесь сказать. Я ценю любой хороший совет здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...