You need to enable JavaScript to run this app. Scala与Spark下拆分字符串提取指定字段生成目标DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

Scala与Spark下拆分字符串提取指定字段生成目标DataFrame

实现方案

推荐优先使用转Map的稳健实现,不受字段顺序变化、缺省字段影响:

方案1:键值对转Map提取(推荐)

import org.apache.spark.sql.functions._

// 原有数据集
var df = Seq(("column1=a1;column2=a2;column3=a3;column4=a4;column5=a5;column6=a6;column7=a7;column8=a8;column9=a9;column10=a10")).toDF("custom")

// 将custom字段转为键值对Map,参数依次为输入列、键值对分隔符、键值分隔符
val dfWithMap = df.withColumn("kv_map", str_to_map(col("custom"), ";", "="))

// 直接从Map中提取目标字段
val resultDf = dfWithMap.select(
  col("kv_map").getItem("column2").as("column2"),
  col("kv_map").getItem("column4").as("column4"),
  col("kv_map").getItem("column6").as("column6")
)

// 查看结果
resultDf.show()

运行输出示例:

+-------+-------+-------+
|column2|column4|column6|
+-------+-------+-------+
|     a2|     a4|     a6|
+-------+-------+-------+

方案2:基于原有拆分逻辑改造(仅适用字段顺序固定场景)

如果可以确保所有行的字段严格按column1到column10的顺序排列,无缺省、无顺序调换,可以直接修改原有代码的select逻辑:

val df2 = df.withColumn("temp_new", split(col("custom"), "\\;")).select(
  col("temp_new").getItem(1).as("column2"),
  col("temp_new").getItem(3).as("column4"),
  col("temp_new").getItem(5).as("column6")
)

df2.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 22:54:03