Я работаю с фреймом данных df
, он содержит Column
массив multi_type [struct], double ... Я хочу изменить schema
фрейма данных: существующий schema
:
root
|-- _id: long (nullable = true)
|-- d: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- col1: struct (nullable = false)
| | | |-- col1: struct (nullable = false)
| | | | |-- value: string (nullable = true)
| | | | |-- type: string (nullable = false)
| | |-- resource: string (nullable = true)
| | |-- cri: string (nullable = true)
|-- d2: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- col1: struct (nullable = false)
| | | |-- col1: struct (nullable = false)
| | | | |-- value: string (nullable = true)
| | | | |-- type: string (nullable = false)
| | |-- resource: string (nullable = true)
| | |-- cri: string (nullable = true)
|-- d4: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- col1: struct (nullable = false)
| | | |-- value: string (nullable = true)
| | | |-- type: string (nullable = false)
| | |-- value: string (nullable = true)
| | |-- vn: double (nullable = true)
Я хочу получить фрейм данных, схема которого выглядит как
root
|-- context_id: long (nullable = true)
|-- data: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- col1: struct (nullable = false)
| | | |-- col1: struct (nullable = false)
| | | | |-- value: string (nullable = true)
| | | | |-- type: string (nullable = false)
| | |-- resource: string (nullable = true)
| | |-- cri: string (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- col1: struct (nullable = false)
| | | |-- col1: struct (nullable = false)
| | | | |-- value: string (nullable = true)
| | | | |-- type: string (nullable = false)
| | |-- resource: string (nullable = true)
| | |-- cri: string (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- col1: struct (nullable = false)
| | | |-- value: string (nullable = true)
| | | |-- type: string (nullable = false)
| | |-- value: string (nullable = true)
| | |-- vn: double (nullable = true)
Я пытался сделать это с spark SQL
, но, как описано, схема содержит сложную схему, также я пытался создать udf
на concat
три массива, но это не удалось, потому что udf
не поддерживает wrappedarray[structType]
и Sql[Row]
... любые предложения, пожалуйста