将字符串类型(MM/dd/YYYY hh:mm:ss AM/PM)转换为 PySpark 中的日期格式?

时间:2021-05-26 15:37:06

标签: pyspark

我有一个格式为 05/26/2021 11:31:56 AM 的字符串,我想在 pyspark 中将其转换为日期格式,例如 05-26-2021。

我尝试了以下内容,但将列类型转换为日期但将值设为空。

df = df.withColumn("columnname", F.to_date(df["columnname"], 'yyyy-MM-dd'))

我尝试过的另一个是

df = df.withColumn("columnname", df["columnname"].cast(DateType()))

我也试过下面的方法

df = df.withColumn(column.lower(), F.to_date(F.col(column.lower())).alias(column).cast("date"))

但在每种方法中,我都能够将列类型转换为日期,但它使值变为空。

感谢任何建议

2 个答案:

答案 0 :(得分:1)

# Create data frame like below
df = spark.createDataFrame(
[("Test", "05/26/2021 11:31:56 AM")], 
("user_name", "login_date"))

# Import functions
from pyspark.sql import functions as f

# Create data framew with new column new_date with data in desired format
df1 = df.withColumn("new_date", f.from_unixtime(f.unix_timestamp("login_date",'MM/dd/yyyy hh:mm:ss a'),'yyyy-MM-dd').cast('date'))  

答案 1 :(得分:0)

@User12345 发布的上述答案有效,下面的方法也有效

df = df.withColumn(column, F.unix_timestamp(column, "MM/dd/YYYY hh:mm:ss aa").cast("double").cast("timestamp"))
df = df.withColumn(column, F.from_utc_timestamp(column, 'Z').cast(DateType()))