python - 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
,但它是基于我已经知道元素名称的假设。但我想做的是,在不知道元素名称的情况下,我只想用列名获取元素名称,在本例中为“爱好”。有没有一种好方法可以获取任何给定列中的所有元素名称?
解决方案
对于具有此架构的给定数据框:
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']
推荐阅读
- android - 如何将 CharSequence 的 Arraylist 转换为 String 的 ArrayList
- sql - 在两个不同的列中搜索和匹配索引,返回第三列的总和 - Postgresql
- python - Google Directory API 返回过时的值
- python - 检查系列中的元素是否相对于系列熊猫中的先前值增加,快速解决方案
- dbeaver - 将 dbeaver 创建表脚本转换为 sql server 脚本
- python-3.x - Groupby 在 pandas 数据框中按季度确定日期并查找它们的出现次数
- spring - 春季启动 liquibase。在实体和数据库之间执行 DIFF
- vue.js - 路径在本地主机上工作,但在生产服务器上不工作 [vue.js]
- sql - 为什么这个 SUM() 字段没有按预期工作?
- google-cloud-storage - 使用 gsutil 命令将维度添加到估计销售报告