You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spark(Scala)中展开嵌套Struct并转换DataFrame结构

解决Databricks中嵌套Struct与数组的展开问题

问题分析

你的原始DataFrame中authors是数组类型,每个数组元素是包含三个字段的结构体:

  • author: 嵌套结构体,内部包含key字段
  • key: 字符串字段
  • type: 字符串字段

你需要展开数组,提取嵌套的author.key作为author_key,同时保留原有的key和type字段,得到目标Schema。

正确实现代码

你之前的代码仅提取了数组元素中的key和type,遗漏了嵌套在author里的key字段。正确做法是在select中同时提取三个字段,并给author.key重命名为author_key:

import org.apache.spark.sql.functions.{explode, col}

df
  .select(explode(col("authors")).alias("author_element")) // 展开数组并设置别名,避免字段引用混淆
  .select(
    col("author_element.author.key").alias("author_key"), // 提取嵌套的author.key并重命名
    col("author_element.key"),
    col("author_element.type")
  )
  .show()

代码解释

  1. explode(col("authors")).alias("author_element"): 将authors数组展开,每个数组元素单独成为一行,用author_element作为别名,后续引用结构体字段时更清晰,避免默认col名称带来的歧义。
  2. 字段提取:
    • col("author_element.author.key").alias("author_key"): 深入嵌套结构体层级,提取author中的key字段,并重命名为目标Schema要求的author_key。
    • col("author_element.key")和col("author_element.type"): 直接提取数组元素结构体中原有的key和type字段。

执行上述代码后,就能得到你需要的三列Schema:author_key、key、type,完整覆盖所有嵌套层级的字段提取需求。

内容的提问来源于stack exchange,提问作者Longinus99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:32:48