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

如何使用PySpark对逗号分隔的时间字符串值进行升序排序?

PySpark实现逗号分隔时间字符串列的升序排序

要把values列里的逗号分隔时间字符串按升序排列,你可以用PySpark的字符串处理、数组排序函数组合完成,具体实现如下:

1. 创建测试DataFrame

先模拟你提供的原始数据:

from pyspark.sql import SparkSession
from pyspark.sql.functions import split, array_sort, concat_ws

# 初始化SparkSession
spark = SparkSession.builder.appName("SortTimeStrings").getOrCreate()

# 构建测试数据
data = [
    (1, "2023-04-02, 2023-02-01, 2023-01-04"),
    (2, "2023-02-01, 2023-01-04, 2023-02-07"),
    (3, "2023-01-08, 2023-01-05, 2023-01-02")
]
df = spark.createDataFrame(data, ["id", "values"])
df.show(truncate=False)

2. 执行排序逻辑

通过三个核心函数完成处理:

  • split("values", ", "):把逗号加空格分隔的字符串拆成字符串数组
  • array_sort(...):对数组进行升序排序(因为你的时间是yyyy-MM-dd格式,字符串排序和时间逻辑排序结果一致,直接用这个函数即可)
  • concat_ws(", ", ...):把排序后的数组重新拼接成逗号分隔的字符串

代码如下:

sorted_df = df.withColumn(
    "values",
    concat_ws(", ", array_sort(split("values", ", ")))
)

sorted_df.show(truncate=False)

结果验证

运行后会得到你想要的排序结果:

+---+---------------------------------------+
|id |values                                 |
+---+---------------------------------------+
|1  |2023-01-04, 2023-02-01, 2023-04-02     |
|2  |2023-01-04, 2023-02-01, 2023-02-07     |
|3  |2023-01-02, 2023-01-05, 2023-01-08     |
+---+---------------------------------------+

如果你的时间格式不是yyyy-MM-dd(比如是MM/dd/yyyy),需要先把数组元素转换成日期类型再排序,最后转回字符串,调整代码如下:

from pyspark.sql.functions import transform, to_date, date_format

sorted_df = df.withColumn(
    "values",
    concat_ws(", ",
        array_sort(
            transform(
                split("values", ", "),
                lambda x: to_date(x, "yyyy-MM-dd")
            )
        )
    )
).withColumn(
    "values",
    concat_ws(", ", transform(split("values", ", "), lambda x: date_format(x, "yyyy-MM-dd")))
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:55:15