我有一个使用spark-xml包转换为dataframe的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]
当我使用flatten函数时,收到错误消息:
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,该udf会吐出该列的扁平字符串版本。
有更好的方法吗?