Amazon web services AWS GLUE:使用Pyspark重命名结构内部的字段名

Amazon web services AWS GLUE:使用Pyspark重命名结构内部的字段名,amazon-web-services,pyspark,aws-glue,Amazon Web Services,Pyspark,Aws Glue,这里提到的模式是我原始模式的一部分,在AWS Glue中使用了Unnest转换之后 profile.details.indices.index: array | |-- element: struct | | |-- profile.details.indices.index.val.indexname: string | | |-- profile.details.indices.index.val.indexsymbol: string 我的要求是使用pysp

这里提到的模式是我原始模式的一部分,在AWS Glue中使用了Unnest转换之后

profile.details.indices.index: array
|    |-- element: struct
|    |    |-- profile.details.indices.index.val.indexname: string
|    |    |-- profile.details.indices.index.val.indexsymbol: string
我的要求是使用pyspark将结构内部的两个字段(“profile.details.index.index.val.indexname”和“profile.details.index.index.val.indexname”)的名称分别更改为indexnameindexsymbol


Glue中的RenameField转换对结构内部的字段不起作用,它生成相同的模式。经过一些研究,我发现我必须创建一个UDF来重命名struct中的字段,因为我是Pyspark的新手。有人能告诉我如何达到我的要求吗。

经过一些研究,我能够在这个博客的帮助下找到问题的解决方案:。如果有人有相同的疑问,请在此处发布答案

我通过更改字段名为特定列创建了一个新模式,并在数据框中为该列铸造了模式

from pyspark.sql.functions import col
from pyspark.sql.types import (
    ArrayType, LongType, StringType, StructField, StructType)

struct_schema = ArrayType(StructType([
    StructField("indexname", StringType()),
    StructField("indexsymbol", StringType()),
]))

df_renamed = df.withColumn("profile.details.indices.index", col("`profile.details.indices.index`").cast(struct_schema))
现在,dataframe模式如下所示

|-- profile.details.indices.index: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- indexname: string (nullable = true)
 |    |    |-- indexsymbol: string (nullable = true)
还有其他解决方案,但由于我的原始模式有100多个其他字段,我发现此解决方案有助于更改特定的嵌套列并保留旧模式