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

Spark Scala 如何从结构化JSON提取embedding生成数组类型RDD

Spark Scala 提取JSON中embedding字段为独立数组RDD的实现

核心前置说明

给定的JSON结构是整个文件为单个大数组,并非Spark默认支持的行分隔JSON格式(即每行一个独立JSON对象),读取时需要做特殊配置,否则会出现解析为空的问题。

实现方案

分布式兼容方案(优先推荐,无单节点OOM风险)

  • 第一步:配置支持多行解析的JSON读取逻辑
import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()
  .appName("ExtractEmbeddingRDD")
  .getOrCreate()

// 关键配置:开启multiLine模式,适配跨多行的单个数组结构JSON
val sourceDF = spark.read
  .option("multiLine", "true")
  .json("你的JSON文件实际存储路径")
  • 第二步:提取embedding列并转换为目标RDD结构
// 每一行直接取出对应的embedding数组,形成RDD
val embeddingRDD = sourceDF
  .select("embedding")
  .rdd
  .map(row => row.getSeq[Double](0).toArray)

最终得到的embeddingRDD中,每一个元素都是对应JSON对象里独立的embedding浮点数组,完全匹配需求。

轻量直读方案(仅适合小体积JSON文件)

如果不需要分布式计算能力、文件体积较小,可以直接解析全量文本提取内容:

import scala.util.parsing.json.JSON

// 读全量文件文本
val fullFileText = spark.sparkContext.textFile("你的JSON文件实际存储路径").collect().mkString
// 解析整个JSON数组
val jsonItems = JSON.parseFull(fullFileText) match {
  case Some(items: List[Map[String, Any]]) => items
  case _ => throw new IllegalArgumentException("JSON结构不符合预期")
}
// 并行化生成目标RDD
val embeddingRDD = spark.sparkContext.parallelize(
  jsonItems.map(item => item("embedding").asInstanceOf[Seq[Double]].toArray)
)

注意:轻量方案会把全量JSON文本拉取到Driver节点解析,大文件场景极易触发OOM,生产环境请优先使用带multiLine配置的分布式读取方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 13:27:03