如何使用PySpark调整日期字符串顺序并移除分隔符
PySpark将MM/YYYY格式字符串转换为YYYYMM格式
针对你的需求,这里提供两种实用的解决方案:
方案一:直接字符串拆分拼接
如果能确定所有数据都是MM/YYYY的合法格式,直接拆分斜杠分隔的两部分,交换顺序后拼接最直接:
from pyspark.sql import SparkSession from pyspark.sql.functions import col, concat, split # 初始化SparkSession spark = SparkSession.builder.appName("DateTransform").getOrCreate() # 测试数据 data = [("03/2024",), ("07/2024",), ("12/2023",)] df = spark.createDataFrame(data, ["original_date"]) # 转换逻辑:拆分后取年份+月份,拼接成YYYYMM df_transformed = df.withColumn( "formatted_date", concat(split(col("original_date"), "/")[1], split(col("original_date"), "/")[0]) ) df_transformed.show()
输出结果:
+-------------+--------------+ |original_date|formatted_date| +-------------+--------------+ | 03/2024| 202403| | 07/2024| 202407| | 12/2023| 202312| +-------------+--------------+
方案二:日期类型转换(带合法性校验)
如果需要同时校验日期的合法性(比如过滤13/2024这种无效数据),可以先将字符串转为日期类型,再格式化输出:
from pyspark.sql.functions import to_date, date_format # 转换逻辑:先转日期,再格式化为YYYYMM df_transformed = df.withColumn( "date_type", to_date(col("original_date"), "MM/yyyy") # 转成日期类型,无效值会变成null ).withColumn( "formatted_date", date_format(col("date_type"), "yyyyMM") ) df_transformed.show()
这种方法的优势是自动过滤非法日期,比如输入13/2024时,date_type会是null,对应的formatted_date也会是null,方便后续数据清洗。
两种方案对比
- 字符串拼接法:速度快,适合数据格式完全规范的场景,没有校验逻辑。
- 日期转换法:更严谨,能校验数据合法性,但性能略低于字符串操作(差异很小)。
内容的提问来源于stack exchange,提问作者Ian_Yu
相关产品推荐
相关产品推荐

