AWS GLUE: переименовать имя поля внутри структуры, используя Pyspark - PullRequest
0 голосов
/ 03 февраля 2020

Упомянутая здесь схема является частью моей исходной схемы после использования преобразования Unnest в AWS Glue.

profile.details.indices.index: array
|    |-- element: struct
|    |    |-- profile.details.indices.index.val.indexname: string
|    |    |-- profile.details.indices.index.val.indexsymbol: string

Мое требование - изменить имя двух полей внутри структуры ( "profile.details.indices.index.val.indexname" и "profile.details.indices.index.val.indexname") в indexname и indexsymbol соответственно с использованием pyspark .

Преобразование RenameField в Glue не работает для полей внутри структуры, оно выдает ту же схему. После некоторых исследований я обнаружил, что мне нужно создать UDF для переименования полей внутри struct, так как я новичок в Pyspark. Может кто-нибудь показать мне, как выполнить мое требование.

1 Ответ

0 голосов
/ 03 февраля 2020

После некоторых исследований я смог найти решение для моего вопроса с помощью этого блога: https://medium.com/@lvhuyen / working-with-spark-dataframe-has-complex-schema-a3bce8c3f44, Размещение ответа здесь, если у кого-то есть такой же запрос.

Я создал новую схему для определенного столбца, изменив имена полей и приведя схему для столбца во фрейме данных

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))

Теперь схема данных выглядит так:

|-- profile.details.indices.index: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- indexname: string (nullable = true)
 |    |    |-- indexsymbol: string (nullable = true)

Существуют и другие решения, но поскольку в моей исходной схеме было более 100 других полей, я нашел, что это решение полезно для изменения конкретного вложенного столбца и сохранить старую схему

...