Я искал пару часов в сети, чтобы найти подсказку о том, как взорвать вложенный 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()
Вы четко видите вложенную структуру в 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
(от столбца к строке). Как это может быть сделано?
Для моей последней задачи мне нужно как-то пройтись по всем пронумерованным структурам, и я предполагаю, что взрыв вложенных структур делает это более эффективным. Если у вас есть другие предложения, не стесняйтесь сказать. Я ценю любой хороший совет здесь.