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

Spark-Scala可变长列表首元素与其余所有元素分别映射配对实现

解决方案

核心思路

用flatMap算子替代原有只能返回单组配对的map算子,对拆分后的列表做一对多展开,同时过滤行末逗号产生的空元素避免无效数据。

完整代码示例

// 原有读取和预处理逻辑保持不变
sc.textFile("你的文件路径")
  .map(x => x.substring(1, x.length - 1))
  .map(x => x.split(",").toList)
  // 新增一对多展开逻辑
  .flatMap(list => {
    val key = list.head
    // 取列表第一个元素后的所有值,过滤空字符串处理行尾逗号问题
    val valueList = list.tail.filter(_.nonEmpty)
    // 每个值都和key组成配对
    valueList.map(value => (key, value))
  })
  .toDF("c1", "c2")

逻辑说明

以你提到的1020对应行为例:
拆分后得到的列表为 List("1020", "23fe40-4796-ad3d-6d5499b|2021-09-19 01:38:59", "77a90a1c97b|2021-09-19 01:34:53", "")

  1. 取list.head得到key为1020
  2. list.tail拿到后面三个元素,过滤空值后得到两个有效数值
  3. 遍历有效数值和key配对,得到两组结果,flatMap会直接把这两组结果展开到最终RDD中,完全匹配你需要的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:09:03