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

如何在Scala中使用split函数处理列并生成CompanyCode记录

问题需求与实现方案

需求说明

需要处理包含多组分号分隔值的列:

  • 每组值格式为前缀-编码,需提取连字符右侧的编码作为CompanyCode
  • 每一组值对应生成一条独立记录,其他属性(示例中仅展示目标列)保持复制

原始数据

+--------------------
|       unparsed_data|
+--------------------
|GT01-5636;GT02-7212
|Gx01-5626;GY01-1112;GL01-4336;GT09-0012

期望输出

+-----------+
|CompanyCode|
+-----------+
|5636       |
|7212       |
|5626       |
|1112       |
|4336       |
|0012       |

Scala实现代码(基于Spark)

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

// 假设已初始化SparkSession,原始数据框为df
val resultDF = df
  // 按分号拆分unparsed_data为字符串数组
  .withColumn("code_pairs", split(col("unparsed_data"), ";"))
  // 将数组拆分为多行,每个编码组单独成一条记录
  .withColumn("code_pair", explode(col("code_pairs")))
  // 按连字符拆分编码组,提取右侧的CompanyCode
  .withColumn("CompanyCode", split(col("code_pair"), "-")(1))
  // 保留目标列,移除临时中间列
  .select("CompanyCode")

resultDF.show()

代码逻辑说明

  • split(col("unparsed_data"), ";"):把每行的字符串按分号分割为数组,每个元素对应一组前缀-编码
  • explode(col("code_pairs")):将数组中的每个元素拆分为独立行,实现一对多的记录展开
  • split(col("code_pair"), "-")(1):对每组前缀-编码按连字符拆分,取索引为1的元素(即连字符右侧的编码内容)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:36:53