使用 PySpark 将字符串处理为 RDS 中的日期数据类型列

Posted

技术标签:

【中文标题】使用 PySpark 将字符串处理为 RDS 中的日期数据类型列【英文标题】:Processing Strings into Date Datatype column in RDS using PySpark 【发布时间】:2022-01-07 11:16:55 【问题描述】:

文件中的日期列(在 AWS S3 中)采用“2021 年 7 月 28 日”格式。由于它是一个文件,因此它被视为字符串数据类型。我正在尝试将数据加载到 RDS(Postgres) . RDS 列是日期数据类型。

我正在使用下面的行将字符串转换为日期,但 NULLS 被加载到日期列中,其余字符串/整数列被正确加载。 df_S3=df_S3.withColumn('visit_date', to_date(df_S3.visit_date, 'MON DD, YYYY'))

我在 S3 文件中将日期从“2021 年 7 月 28 日”更改为“28-JUL-2021”,并使用以下代码行将数据处理到 RDS 中 - df_S3=df_S3.withColumn('visit_date', to_date(df_S3.visit_date, 'DD-MMM-YYYY'))

日期已正确加载到 RDS 中。

您能否建议如何使用 PySpark 将“2021 年 7 月 28 日”转换/加载为日期数据类型列?

谢谢。

【问题讨论】:

【参考方案1】:

你可以试试下面的

df_S3=df_S3.withColumn('visit_date', to_date(df_S3.visit_date, 'MMMM d, yyyy'))

基于latest docs 中传达的更改:

我们使用MMMM 匹配完整的月份名称,d 匹配日期编号,yyyy 匹配年份。

完整示例

df_S3 = spark.createDataFrame([("July 28, 2021",),("March 5, 2013",)],schema="visit_date string")
df_S3.show()
+-------------+
|   visit_date|
+-------------+
|July 28, 2021|
|March 5, 2013|
+-------------+
df_S3.withColumn('visit_date2', F.to_date(df_S3.visit_date, 'MMMM d, yyyy')).show()
+-------------+-----------+
|   visit_date|visit_date2|
+-------------+-----------+
|July 28, 2021| 2021-07-28|
|March 5, 2013| 2013-03-05|
+-------------+-----------+

【讨论】:

@Sonu 太棒了!请投票然后将此答案标记为已接受的答案,以便其他有类似问题的 *** 访问者可以确定此答案可以解决他们的问题。

以上是关于使用 PySpark 将字符串处理为 RDS 中的日期数据类型列的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyspark 从 RDS MySQL 数据库中提取数据

在 Pyspark/Hive 中处理不断变化的数据类型

如何使用PySpark将SparseVector中的前X个单词转换为字符串数组

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

AWS Glue 将字符串值从 postgres 转换为 json 数组

Pyspark Dataframe:无法保存为 Hive 表