[英]pySpark: How can I get all element names in structType in arrayType column in a dataframe?
我有一個看起來像這樣的 dataframe:
|-- 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']
但是,我發現的唯一最接近的解決方案是使用帶有withColumn
的 explode function ,但它是基於我已經知道元素名稱的假設。 但我想做的是,在不知道元素名稱的情況下,我只想用列名獲取元素名稱,在本例中為“愛好”。 有沒有一種好方法可以獲取任何給定列中的所有元素名稱?
對於具有此架構的給定 dataframe:
df.printSchema()
root
|-- hobbies: array (nullable = false)
| |-- element: struct (containsNull = false)
| | |-- favorite: string (nullable = false)
| | |-- non-favorite: string (nullable = false)
您可以 select 結構的字段名稱為:
struct_fields = df.schema['hobbies'].dataType.elementType.fieldNames()
# output: ['favorite', 'non-favorite']
pyspark.sql.types.StructType.fieldnames
應該可以滿足您的需求。
fieldNames() Returns all field names in a list. >>> struct = StructType([StructField("f1", StringType(), True)]) >>> struct.fieldNames() ['f1']
所以在你的情況下
dataframe.hobbies.getItem(0).fieldnames()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.