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

Spark分组后创建结构体数组的实现方法求助

Spark实现Books列生成方案

你需要通过分组+收集结构化列表的方式生成Books列,以下是具体实现代码(包含Python和Scala两种常用版本):

核心思路

按St Id分组后,使用collect_list函数将每组内的St Id、Book Id、Pages三个字段打包成结构化数据并收集为列表,即可得到目标格式的Books列;Num Books可直接通过分组计数获取(若你已实现计数,可只保留Books列的生成逻辑)。

Python 版本

from pyspark.sql import functions as F

# 假设你的原始数据集已经加载为DataFrame df
result_df = df.groupBy("St Id") \
    .agg(
        # 将三个字段打包成结构体,再收集为列表
        F.collect_list(F.struct("St Id", "Book Id", "Pages")).alias("Books"),
        # 统计借阅数量(若已实现可删除此行)
        F.count("*").alias("Num Books")
    )

# 查看结果
result_df.show(truncate=False)

Scala 版本

import org.apache.spark.sql.functions.{collect_list, struct, count}

// 假设原始数据集已加载为DataFrame df
val resultDf = df.groupBy("St Id")
    .agg(
        collect_list(struct("St Id", "Book Id", "Pages")).alias("Books"),
        count("*").alias("Num Books")
    )

// 查看结果
resultDf.show(false)

输出说明

执行后得到的结果会和你需求的格式完全匹配:

  • Books列会以[St Id, Book Id, Pages]的结构化数组形式展示每组的借阅记录
  • Num Books列对应每组的借阅次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:27:11