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')]
)
)
我丢失了记录。
关于我如何做的任何想法:
- 根据
_field.ref
是 array
还是 struct
过滤 DataFrame
- 将
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()
将结构转换为数组后,重新组合它们
运行 关于如何解决以下问题的想法。 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')]
)
)
我丢失了记录。
关于我如何做的任何想法:
- 根据
_field.ref
是array
还是struct
过滤 DataFrame
- 将
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()
将结构转换为数组后,重新组合它们