Как выбрать все структуры из фрейма данных в pyspark? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть база данных json, загруженная с помощью pyspark.

Я пытаюсь получить доступ ко всем "х" компонентам каждой структуры в нем.

Это вывод df.select("level_instance_json.player").printSchema()

root
 |-- player: struct (nullable = true)
 |    |-- 0: struct (nullable = true)
 |    |    |-- head_pitch: long (nullable = true)
 |    |    |-- head_roll: long (nullable = true)
 |    |    |-- head_yaw: long (nullable = true)
 |    |    |-- r: long (nullable = true)
 |    |    |-- x: long (nullable = true)
 |    |    |-- y: long (nullable = true)
 |    |-- 1: struct (nullable = true)
 |    |    |-- head_pitch: long (nullable = true)
 |    |    |-- head_roll: long (nullable = true)
 |    |    |-- head_yaw: long (nullable = true)
 |    |    |-- r: long (nullable = true)
 |    |    |-- x: long (nullable = true)
 |    |    |-- y: long (nullable = true)
...

Я пытался выбрать все с помощью селектора '*', но он не работает. df.select("level_instance_json.player.*.x").show(10) выдает эту ошибку:

'No such struct field * in 0, 1, 10, 100, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 101, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 102,...

1 Ответ

0 голосов
/ 07 июня 2019

Вы можете сделать это:

list_player_numbers = [el.name for el in df.select("level_instance_json.player").schema['player'].dataType]
list_fields = ['.'.join(['level_instance_json', 'player', player_number, 'x']) for player_number in list_player_numbers]

output = df.select(list_fields)

Это должно работать.

Xavier

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