如何在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()
代码解释
explode(col("authors")).alias("author_element"): 将authors数组展开,每个数组元素单独成为一行,用author_element作为别名,后续引用结构体字段时更清晰,避免默认col名称带来的歧义。- 字段提取:
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
相关产品推荐
相关产品推荐

