Amazon web services AWS GLUE:使用Pyspark重命名结构内部的字段名
这里提到的模式是我原始模式的一部分,在AWS Glue中使用了Unnest转换之后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
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”)的名称分别更改为indexname和indexsymbol
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多个其他字段,我发现此解决方案有助于更改特定的嵌套列并保留旧模式