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



关于如何解决以下问题的想法用完了。Glue数据目录中的一个表具有以下模式:

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过滤DataFrame
  2. struct记录转换为array,反之亦然

我使用解决了自己的问题

resolved_df = ResolveChoice.apply(df, choice = "make_cols")

这将把array值保存在新的ref_array列中,把struct值保存在ref_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()的数组后,重新组合

相关内容

  • 没有找到相关文章

最新更新