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

Scala Spark如何从单数据列拆分生成多个新数据列

Spark拆分键值对列实现方案

方法1:固定键场景(已知仅包含name、address两个键)

直接通过字符串拆分函数按规则提取值,逻辑简单高效:

PySpark 示例代码

from pyspark.sql import functions as F

df = df.withColumn("name", F.split(F.split(F.col("col_b"), ", ")[0], "=")[1]) \
       .withColumn("address", F.split(F.split(F.col("col_b"), ", ")[1], "=")[1]) \
       .drop("col_b")

Scala 示例代码

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

val resDf = df.withColumn("name", split(split(col("col_b"), ", ")(0), "=")(1))
              .withColumn("address", split(split(col("col_b"), ", ")(1), "=")(1))
              .drop("col_b")

方法2:通用场景(键数量不固定/后续可能新增键)

先将col_b转为Map结构再按键取值,扩展性更强:
str_to_map 函数要求Spark版本在2.3及以上

PySpark 示例代码

from pyspark.sql import functions as F

df = df.withColumn("col_b_map", F.str_to_map(F.col("col_b"), ", ", "=")) \
       .withColumn("name", F.col("col_b_map")["name"]) \
       .withColumn("address", F.col("col_b_map")["address"]) \
       .drop("col_b", "col_b_map")

Scala 示例代码

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

val resDf = df.withColumn("col_b_map", str_to_map(col("col_b"), ", ", "="))
              .withColumn("name", col("col_b_map")("name"))
              .withColumn("address", col("col_b_map")("address"))
              .drop("col_b", "col_b_map")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:15:06