apache-spark - 如何将所有日期格式转换为日期列的时间戳?

标签 apache-spark datetime pyspark apache-spark-sql

我使用的是 PySpark 版本 3.0.1。我正在读取一个 csv 文件作为具有 2 个日期列的 PySpark 数据框。但是当我尝试打印模式时,两列都填充为字符串类型。

enter image description here

enter image description here

上面的屏幕截图是数据框和数据框的架构。

如何使用 pyspark 将日期列中的行值转换为时间戳格式?

我已经尝试了很多东西,但所有代码都需要当前格式,但如果我不知道 csv 文件中的格式是什么,如何转换为正确的时间戳。

我也尝试了下面的代码,但这是创建一个具有空值的新列

df1 = df.withColumn('datetime', col('joining_date').cast('timestamp'))
print(df1.show())
print(df1.printSchema())

enter image description here

最佳答案

由于有两种不同的日期类型,您需要使用两种不同的日期格式进行转换,并合并结果。

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/

相关文章:

apache-spark - spark-如何在使用 RowMatrix 计算相似度后检索项目对

java - 使用 JavaRdd<Row> 映射 Spark DataFrame 列值

python - 如何在 pandas 数据框中执行不同值的累积和

java - java中日期时区格式的转换

apache-spark - pyspark计算每组的空值数量

apache-spark - 在pyspark中捕获explain()的结果

apache-spark - 如何同时运行 2 个 EMR Spark Step?

apache-spark - Py4JError : An error occurred while calling o90. 适合

python - 无法将 pandas 日期时间列与从数据库获取的日期时间进行比较

apache-spark - UserWarning : pyarrow. open_stream 已弃用,请使用 pyarrow.ipc.open_stream 警告