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

Spark Scala实现DataFrame城市列单词首字母大写并保留全列

解决方案

方法1:使用自定义UDF

通过自定义函数处理City列的字符串,再用withColumn替换原列,保留所有其他列:

import org.apache.spark.sql.functions.udf

// 定义处理函数:拆分字符串后每个单词首字母大写再拼接
val capitalizeWords = udf((cityStr: String) => {
  cityStr.trim.split(" ").map(_.capitalize).mkString(" ")
})

// 修改City列,其余列自动保留
val resultDf = df.withColumn("City", capitalizeWords(df("City")))
resultDf.show()

方法2:使用Spark内置函数(Spark 3.0+)

利用Spark原生函数组合实现,无需自定义UDF,性能更优:

import org.apache.spark.sql.functions.{trim, split, transform, initcap, concat_ws}

val resultDf = df.withColumn(
  "City",
  concat_ws(" ", transform(split(trim($"City"), " "), word => initcap(word)))
)
resultDf.show()
  • trim:去除City字符串首尾空格
  • split:按空格拆分字符串为单词数组
  • transform:对数组中每个单词应用initcap(首字母大写,其余小写)
  • concat_ws:将处理后的单词数组重新拼接成字符串

原代码问题说明

你使用的map操作会把DataFrame的每一行(Row对象)转换为单个字符串,直接生成了仅含value列的新DataFrame,因此丢失了ID、Country等其他列。而withColumn是在原DataFrame基础上修改指定列,不会影响其他列的保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:35:22