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

Scala Spark如何从嵌套Schema中提取Map的key及深层Struct/Array字段

场景1:提取map嵌套array中的key、name、id字段

第一次对map类型的contributors执行explode后会自动生成key和value两个列,你之前的写法没有保留key列就直接做了下一层爆炸,调整逻辑如下即可:

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

val result1 = df.select(explode(col("contributors"))) 
  .select(col("key"), explode(col("value")).alias("contributor")) 
  .select(
    col("key"),
    col("contributor.name"),
    col("contributor.id")
  )

场景2:提取struct嵌套array中的指定字段

你之前的写法错误原因是col_mainGenre_name是DataFrame类型,无法直接传入select方法作为列参数,Spark支持直接通过路径访问任意层级的嵌套字段,不需要提前拆分出单独的DataFrame,实现代码如下:

需要爆炸子分类数组(每个子分类对应一条记录)

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

val result2 = df_r.select(
    col("mainGenre.value._name").alias("main_genre_name"),
    explode(col("mainGenre.subgenres")).alias("subgenre")
  )
  .select(
    col("main_genre_name"),
    col("subgenre.value._name").alias("sub_genre_name")
  )

不需要爆炸子分类数组(保留数组格式)

val result2 = df_r.select(
    col("mainGenre.value._name").alias("main_genre_name"),
    col("mainGenre.subgenres.value._name").alias("sub_genre_names")
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:36:03