为什么我不能在pyspark中将字符串类型的列转换为日期格式?

f8rj6qna  于 2022-12-22  发布在  Spark
关注(0)|答案(1)|浏览(158)

我有一个栏目是"20130623"格式的,我想把它转换成日-月-年。我在网上看到了很多帖子,包括这里。但是我只得到了一个解决方案,如下所示

from datetime import datetime
df = df2.withColumn("col_name", datetime.utcfromtimestamp(int("col_name")).strftime('%d-%m-%y'))

但是,它抛出了一个错误,输入应该是int typenot the string type。我试图在int()函数的帮助下进行转换。但即使这样似乎也没有帮助。
下面是我在转换时看到的错误

invalid literal for int() with base 10: 'col_name'

我不确定它是将col_name作为字符串,还是将其值作为字符串。请给出建议,如何做到这一点,或者获得所需输出的最佳方法
注意:我不能在我的环境中使用Pandas。
谢谢您。

9lowa7mx

9lowa7mx1#

withColumn()应该使用Spark类型,但不能使用python datetime。
首先使用to_date将字符串解析为日期,然后使用date_format将日期格式化为字符串:

import pyspark.sql.functions as F

df = spark.createDataFrame(data=[["20130623"]], schema=["date_str"])

df = df.withColumn("date", F.to_date("date_str", format="yyyyMMdd"))
df = df.withColumn("date_ddMMyyyy", F.date_format("date", format="dd-MM-yyyy"))

df.show(truncate=False)
df.printSchema()

输出:

+--------+----------+-------------+
|date_str|date      |date_ddMMyyyy|
+--------+----------+-------------+
|20130623|2013-06-23|23-06-2013   |
+--------+----------+-------------+

root
 |-- date_str: string (nullable = true)
 |-- date: date (nullable = true)
 |-- date_ddMMyyyy: string (nullable = true)

无论您在date列中看到的输出2013-06-23是什么,它实际上都是日期的默认_string()表示形式。

相关问题