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

如何使用Spark DataFrame修剪SCHDULE列的值?

问题

我有如下Spark DataFrame,需要修剪SCHDULE列的值,尝试用UDF没得到预期结果。

原始DataFrame:

SCHDULEIDVALUE
100H/10AR1KL0130
100H/10TR2KL0140
100H/22TR1KL0120
100H/22TR2KL0120
105JK/12PK1AA0510
105JK/12PK2AA0520
105JH/33PK3AA0550
105JH/33PK4AA0530
110P/1BR0320
110P/2BR0310

目标输出(注:当前输入输出表格内容一致,推测你需要对SCHDULE做特定字符串修剪,以下基于常见场景给出方案):

SCHDULEIDVALUE
100H/10AR1KL0130
100H/10TR2KL0140
100H/22TR1KL0120
100H/22TR2KL0120
105JK/12PK1AA0510
105JK/12PK2AA0520
105JH/33PK3AA0550
105JH/33PK4AA0530
110P/1BR0320
110P/2BR0310
解决方案

Spark内置字符串函数比UDF更高效,以下是常见修剪场景的实现:

提取斜杠前的部分

// Scala
import org.apache.spark.sql.functions._
val trimmedDF = originalDF.withColumn("SCHDULE", split(col("SCHDULE"), "/").getItem(0))
# Python
from pyspark.sql.functions import split, col
trimmed_df = original_df.withColumn("SCHDULE", split(col("SCHDULE"), "/").getItem(0))

去除首尾空格

// Scala
import org.apache.spark.sql.functions._
val trimmedDF = originalDF.withColumn("SCHDULE", trim(col("SCHDULE")))
# Python
from pyspark.sql.functions import trim, col
trimmed_df = original_df.withColumn("SCHDULE", trim(col("SCHDULE")))

提取斜杠后的部分

// Scala
import org.apache.spark.sql.functions._
val trimmedDF = originalDF.withColumn("SCHDULE", split(col("SCHDULE"), "/").getItem(1))
# Python
from pyspark.sql.functions import split, col
trimmed_df = original_df.withColumn("SCHDULE", split(col("SCHDULE"), "/").getItem(1))

自定义截取长度

比如保留前5个字符:

// Scala
import org.apache.spark.sql.functions._
val trimmedDF = originalDF.withColumn("SCHDULE", substring(col("SCHDULE"), 1, 5))
# Python
from pyspark.sql.functions import substring, col
trimmed_df = original_df.withColumn("SCHDULE", substring(col("SCHDULE"), 1, 5))

如果你的修剪需求更具体,补充规则后可以再调整实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:15:05