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

Spark DataFrame(Scala):拆分合并列并保留其余数据求助

解决Spark DataFrame拆分"age;job"列的方案

操作步骤(Spark Shell Scala环境)

  1. 导入Spark SQL所需函数
  2. 拆分目标合并列并提取独立字段
  3. 删除原合并列,保留其余所有数据

代码实现

方法一:直接拆分提取(简洁版)

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

// 假设你的原始DataFrame名为df
val processedDF = df
  // 拆分"age;job"列,提取第一个元素作为age列并转为整数(按需调整类型)
  .withColumn("age", split(col("age;job"), ";").getItem(0).cast("int"))
  // 提取第二个元素作为job列
  .withColumn("job", split(col("age;job"), ";").getItem(1))
  // 删除原合并列
  .drop("age;job")

// 验证处理结果
processedDF.show()
processedDF.printSchema()

方法二:先存拆分结果再提取(性能优化版)

如果数据量较大,为避免重复调用split函数消耗资源,可先将拆分后的数组暂存为临时列:

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

val processedDF = df
  .withColumn("temp_split", split(col("age;job"), ";"))
  .withColumn("age", col("temp_split").getItem(0).cast("int"))
  .withColumn("job", col("temp_split").getItem(1))
  // 同时删除原合并列和临时列
  .drop("age;job", "temp_split")

processedDF.show()

注意事项

  • 如果age列不需要整数类型,直接去掉.cast("int")即可
  • 若实际分隔符不是分号,替换split函数中的";"为对应分隔符
  • 该操作会自动保留原始DataFrame中的所有其他列,无需额外指定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:45:27