У меня есть файл XML, преобразованный в фрейм данных с использованием пакета spark-xml. Фрейм данных имеет следующую структуру:
root
|-- results: struct (nullable = true)
| |-- result: struct (nullable = true)
| | |-- categories: struct (nullable = true)
| | | |-- category: array (nullable = true)
| | | | |-- element: struct (containsNull = true)
| | | | | |-- value: string (nullable = true)
если я выберу столбец категории (который может появляться несколько раз под категориями):
df.select((col('results.result.categories.category')).alias("result_categories"))
Для одной записи результат будет выглядеть так:
[[result1], [result2]]
Я пытаюсь сгладить результаты:
[result1, result2]
Когда я использую функцию сглаживания, я получаю сообщение об ошибке:
df.select(flatten(col('results.result.categories.category')).alias("Hits_Category"))
cannot resolve 'flatten(`results`.`result`.`categories`.`category`)' due to data type mismatch: The argument should be an array of arrays, but '`results`.`result`.`categories`.`category`' is of array<struct<value:string>
В итоге я создаю udf и передаю столбец udf, который выводит версию столбца с плоской строкой.
Есть ли способ лучше?