首页 > 解决方案 > pySpark:如何在数据框中的 arrayType 列中获取 structType 中的所有元素名称?

问题描述

我有一个看起来像这样的数据框:

 |-- name: string (nullable = true)
 |-- age: string (nullable = true)
 |-- job: string (nullable = true)
 |-- hobbies: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- favorite: string (nullable = true)
 |    |    |-- non-favorite: string (nullable = true)

我正在尝试获取这些信息:

['favorite', 'non-favorite']

但是,我发现的唯一最接近的解决方案是使用带有 的 explode 函数withColumn,但它是基于我已经知道元素名称的假设。但我想做的是,在不知道元素名称的情况下,我只想用列名获取元素名称,在本例中为“爱好”。有没有一种好方法可以获取任何给定列中的所有元素名称?

标签: pythonapache-sparkpysparkapache-spark-sql

解决方案


对于具有此架构的给定数据框:

df.printSchema()

root
 |-- hobbies: array (nullable = false)
 |    |-- element: struct (containsNull = false)
 |    |    |-- favorite: string (nullable = false)
 |    |    |-- non-favorite: string (nullable = false)

您可以选择结构的字段名称为:

struct_fields = df.schema['hobbies'].dataType.elementType.fieldNames()

# output: ['favorite', 'non-favorite']

推荐阅读