我使用的是 PySpark 版本 3.0.1。我正在读取一个 csv 文件作为具有 2 个日期列的 PySpark 数据框。但是当我尝试打印模式时,两列都填充为字符串类型。
上面的屏幕截图是数据框和数据框的架构。
如何使用 pyspark 将日期列中的行值转换为时间戳格式?
我已经尝试了很多东西,但所有代码都需要当前格式,但如果我不知道 csv 文件中的格式是什么,如何转换为正确的时间戳。
我也尝试了下面的代码,但这是创建一个具有空值的新列
df1 = df.withColumn('datetime', col('joining_date').cast('timestamp'))
print(df1.show())
print(df1.printSchema())
最佳答案
由于有两种不同的日期类型,您需要使用两种不同的日期格式进行转换,并合并结果。
import pyspark.sql.functions as F
result = df.withColumn(
'datetime',
F.coalesce(
F.to_timestamp('joining_date', 'MM-dd-yy'),
F.to_timestamp('joining_date', 'MM/dd/yy')
)
)
result.show()
+------------+-------------------+
|joining_date| datetime|
+------------+-------------------+
| 01-20-20|2020-01-20 00:00:00|
| 01/19/20|2020-01-19 00:00:00|
+------------+-------------------+
如果你想全部转换为单一格式:
import pyspark.sql.functions as F
result = df.withColumn(
'datetime',
F.date_format(
F.coalesce(
F.to_timestamp('joining_date', 'MM-dd-yy'),
F.to_timestamp('joining_date', 'MM/dd/yy')
),
'MM-dd-yy'
)
)
result.show()
+------------+--------+
|joining_date|datetime|
+------------+--------+
| 01-20-20|01-20-20|
| 01/19/20|01-19-20|
+------------+--------+
关于apache-spark - 如何将所有日期格式转换为日期列的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65507306/