AWS Glue 将列选择解析为数组或结构

AWS Glue Resolve Column Choice as Array or Struct

运行 关于如何解决以下问题的想法。 Glue 数据目录中的 table 具有此架构:

root
|-- _id: string
|-- _field: struct
|    |-- ref: choice
|    |    |-- array
|    |    |    |-- element: struct
|    |    |    |    |-- value: null
|    |    |    |    |-- key: string
|    |    |    |    |-- name: string
|    |    |-- struct
|    |    |    |-- value: null
|    |    |    |-- key: choice
|    |    |    |    |-- int
|    |    |    |    |-- string
|    |    |    |-- name: string

如果我尝试使用

解决 ref 选择
resolved = (
     df.
        resolveChoice(
            specs = [('_field.ref','cast:array')]
        )
)

我丢失了记录。

关于我如何做的任何想法:

  1. 根据 _field.refarray 还是 struct
  2. 过滤 DataFrame
  3. struct 条记录转换为 array 条记录,反之亦然

我能够通过使用

解决我自己的问题
resolved_df = ResolveChoice.apply(df, choice = "make_cols")

这将在新的 ref_array 列中保存 array 个值,在 ref_struct 列中保存 struct 个值。

这让我可以将 DataFrame 拆分

resolved_df1 = resolved_df.filter(col("ref_array").isNotNull()).select(col("ref_array").alias("ref"))

resolved_df2 = resolved_df.filter(col("ref_struct").isNotNull()).select(col("ref_struct").alias("ref"))

仅将数组转换为结构(使用 explode())或使用 array() 将结构转换为数组后,重新组合它们