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

如何在Spark DataFrame中选择嵌套结构并保留其层级

保留Spark DataFrame嵌套结构的Select操作方法

问题描述

原始DataFrame的数据结构如下:

key
    my_id1
    my_id2
value
    my_value1
    my_value2

需要保留my_id1、my_id2和my_value2,同时维持原有的嵌套结构,但执行以下代码后:

val myDf = myoriginalDF
  .select("key.*", "value.my_value2")

得到的是扁平化结构:

my_id1
my_id2
my_value2

如何在select操作中保留嵌套结构?

解决方案

要保留嵌套层级,需要用struct()函数重新构建嵌套字段,而不是直接展开或单独提取。具体代码如下:

import org.apache.spark.sql.functions.struct

val myDf = myoriginalDF
  .select(
    struct("key.my_id1", "key.my_id2").alias("key"),
    struct("value.my_value2").alias("value")
  )

代码说明

  • struct("key.my_id1", "key.my_id2")将指定字段重新组合成名为key的嵌套结构体,还原原始层级
  • struct("value.my_value2")同理,构建只包含my_value2的value嵌套结构体
  • 用alias()给结构体命名,和原始结构保持一致

执行后得到的结果结构如下,仅保留需要的字段且嵌套层级不变:

key
    my_id1
    my_id2
value
    my_value2

也可以分两步实现,先提取目标字段再重组结构:

val myDf = myoriginalDF
  .select("key.my_id1", "key.my_id2", "value.my_value2")
  .select(
    struct("my_id1", "my_id2").alias("key"),
    struct("my_value2").alias("value")
  )

效果和第一种方法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:27:03