簡體   English   中英

pySpark:如何在 dataframe 的 arrayType 列中獲取 structType 中的所有元素名稱?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM