Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Pyspark将字符串转换为包含两种不同格式的日期时间戳列_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Apache spark Pyspark将字符串转换为包含两种不同格式的日期时间戳列

Apache spark Pyspark将字符串转换为包含两种不同格式的日期时间戳列,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我正在处理芝加哥数据集,日期列采用字符串格式,由日期组成,但有两种不同的格式: Row(Date='01/10/2008 12:00'), Row(Date='02/25/2008 08:20:53 PM') 我找到了下面的代码并尝试了这两种格式(我不确定这两种格式是否正确),但由于它包含两种格式,下面的两种代码都收到了找不到格式的错误消息 data_clean = data_clean.withColumn("Date_dt", f.from_unixtime(f.uni

我正在处理芝加哥数据集,日期列采用字符串格式,由日期组成,但有两种不同的格式:

Row(Date='01/10/2008 12:00'),
Row(Date='02/25/2008 08:20:53 PM')
我找到了下面的代码并尝试了这两种格式(我不确定这两种格式是否正确),但由于它包含两种格式,下面的两种代码都收到了找不到格式的错误消息

data_clean = data_clean.withColumn("Date_dt", f.from_unixtime(f.unix_timestamp("Date",'MM/dd/yy hh:mm:ss aa'),'MM/dd/yyyy HH:mm:ss'))
data_clean.withColumn("Date_dt", to_timestamp("Date", "MM/dd/yy HH:mm")).show(1, False)
我还发现了以下解决方案,但我需要一个datetime格式,包括小时和分钟作为输出:

from pyspark.sql.functions import coalesce, to_date
def to_date_(col, formats=("MM/dd/yyyy", "yyyy-MM-dd")):
    return coalesce(*[to_date(col, f) for f in formats])

您对检查格式并根据格式转换有何建议?

您可以使用
date\u格式
将解析后的日期转换为所需的格式:

import pyspark.sql.functions as F

df.show(truncate=0)
+----------------------+
|date                  |
+----------------------+
|01/10/2008 12:00      |
|02/25/2008 08:20:53 PM|
+----------------------+

df2 = df.withColumn(
    'date2', 
    F.date_format(
        F.coalesce(
            F.to_timestamp('date', 'MM/dd/yyyy hh:mm:ss a'), 
            F.to_timestamp('date', 'MM/dd/yyyy HH:mm')
        ), 
        'MM/dd/yyyy HH:mm'
    )
)

df2.show(truncate=0)
+----------------------+----------------+
|date                  |date2           |
+----------------------+----------------+
|01/10/2008 12:00      |01/10/2008 12:00|
|02/25/2008 08:20:53 PM|02/25/2008 20:20|
+----------------------+----------------+

您可以使用
date\u格式
将解析的日期转换为所需的格式:

import pyspark.sql.functions as F

df.show(truncate=0)
+----------------------+
|date                  |
+----------------------+
|01/10/2008 12:00      |
|02/25/2008 08:20:53 PM|
+----------------------+

df2 = df.withColumn(
    'date2', 
    F.date_format(
        F.coalesce(
            F.to_timestamp('date', 'MM/dd/yyyy hh:mm:ss a'), 
            F.to_timestamp('date', 'MM/dd/yyyy HH:mm')
        ), 
        'MM/dd/yyyy HH:mm'
    )
)

df2.show(truncate=0)
+----------------------+----------------+
|date                  |date2           |
+----------------------+----------------+
|01/10/2008 12:00      |01/10/2008 12:00|
|02/25/2008 08:20:53 PM|02/25/2008 20:20|
+----------------------+----------------+