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

如何在PySpark中基于传入的字符串格式日期创建DataFrame?

在PySpark中基于字符串格式日期创建DataFrame的方法

嘿,我来帮你搞定这个问题!你已经有了从文本文件构建DataFrame的代码,现在想要直接基于传入的字符串格式日期值来创建DataFrame对吧?下面给你几种实用的方法:

方法1:直接构造数据列表创建(灵活可控)

如果手里有现成的字符串日期数据(比如你test.txt里那种yyyyMMdd格式的20180405),可以直接构造数据列表,再通过指定Schema来创建DataFrame,这种方式清晰又灵活:

from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType, DateType

# 初始化SparkSession(如果还没初始化的话)
spark = SparkSession.builder.appName("test_date_df").getOrCreate()

# 模拟你传入的字符串日期数据,每条记录是(cCode, pCode, 字符串日期)
data = [
    ("149", "898", "20180405"),
    ("135", "379", "20180428"),
    ("135", "381", "20180406"),
    ("31", "898", "20180429")
]

# 定义Schema,明确每个字段的类型
schema = StructType([
    StructField("cCode", StringType(), nullable=True),
    StructField("pCode", StringType(), nullable=True),
    StructField("mDate", StringType(), nullable=True)  # 先以字符串类型存储原始日期
])

# 创建DataFrame
df = spark.createDataFrame(data, schema=schema)
df.show()

如果后续需要做日期相关的操作(比如筛选某月的数据、计算日期差),可以用to_date函数把字符串转换成PySpark的DateType,记得一定要指定正确的原始日期格式:

from pyspark.sql.functions import to_date

# 将字符串日期转换为日期类型,原始格式是yyyyMMdd
df_with_date = df.withColumn("mDate", to_date(df.mDate, "yyyyMMdd"))
# 查看转换后的Schema和数据
df_with_date.printSchema()
df_with_date.show()

方法2:基于现有代码调整(处理传入的原始字符串)

如果你的输入是类似test.txt里的长字符串(比如用空格分隔每条记录、竖线分隔字段),可以直接对这个字符串做处理,不用读文件:

from pyspark.sql import Row

# 模拟你传入的原始字符串内容
input_raw_str = "149|898|20180405 135|379|20180428 135|381|20180406 31|898|20180429 31|245|20180430"

# 处理字符串并创建DataFrame
df_transac = spark.createDataFrame(
    spark.sparkContext.parallelize(input_raw_str.split(" "))  # 按空格拆分每条记录
    .map(lambda x: x.split("|")[:3])  # 按竖线拆分字段
    .map(lambda r: Row(cCode=r[0], pCode=r[1], mDate=r[2]))
)

# 同样可以转换日期类型
df_transac = df_transac.withColumn("mDate", to_date(df_transac.mDate, "yyyyMMdd"))
df_transac.show()

小提示

  • 如果只是需要存储日期字符串,用StringType就足够;如果要做日期计算、筛选等操作,转换成DateType能让PySpark提供更多日期相关的函数支持。
  • 用to_date时,格式参数一定要和你的原始字符串日期匹配,比如yyyyMMdd对应20180405,yyyy-MM-dd对应2018-04-05,格式不对会导致解析失败返回null哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:24:28