将日期从整数转换为日期格式
Convert date from integer to date format
我有一列 'start_date',它是一个整数 37823。这发生在我使用 xlrd 库将 xlsx 转换为 csv 时。因此 '2003/07/21' 被转换为 37823.
我已经阅读了 xlrd 文档并且我知道有几种方法可以将其转换为最新的。但是,我需要在 AWS Glue ETL 作业中使用 PySpark 将其转换为日期格式。有什么建议吗?
我尝试使用 to_date、date_format 函数,但没有任何效果。
我想有更优雅的方法可以做到这一点,但这是我现在想到的。
from datetime import date
df.hire_date = df.hire_date.apply(date.fromordinal) # this will give you date in dash format
df.hire_date = df.hire_date.apply(lambda x: str(x).replace('-', '/')) # this will simply replace dash with slash
希望这对你有用:)
我终于解决了这个问题。
使用 UDF:
def convert_date(x):
mDt = datetime.datetime(1899, 12, 30)
dlt = mDt + datetime.timedelta(days=x)
return dlt.strftime("%Y-%m-%d")
convert_date_udf = udf(lambda z: convert_date(z), StringType())
df = df.withColumn('hire date', convert_date_udf('hire date').alias('hire date new'))
不使用 UDF:
df = df.withColumn('hire date', F.expr("date_add(to_date('1899-12-30'), cast(`hire date` as int))").cast(StringType())
希望对您有所帮助!
看起来像 12/30/1899 + 37823 天 = 2003/07/21
您可以使用下面的 date_add 函数代替 UDF 或 python 函数。 UDF 应该比 pyspark 函数慢一点。
weird_date = 37823
df = spark.createDataFrame([('1899-12-30',)], ['dt'])
df.select(date_add(df.dt, weird_date).alias('converted_date')).collect()
我有一列 'start_date',它是一个整数 37823。这发生在我使用 xlrd 库将 xlsx 转换为 csv 时。因此 '2003/07/21' 被转换为 37823.
我已经阅读了 xlrd 文档并且我知道有几种方法可以将其转换为最新的。但是,我需要在 AWS Glue ETL 作业中使用 PySpark 将其转换为日期格式。有什么建议吗?
我尝试使用 to_date、date_format 函数,但没有任何效果。
我想有更优雅的方法可以做到这一点,但这是我现在想到的。
from datetime import date
df.hire_date = df.hire_date.apply(date.fromordinal) # this will give you date in dash format
df.hire_date = df.hire_date.apply(lambda x: str(x).replace('-', '/')) # this will simply replace dash with slash
希望这对你有用:)
我终于解决了这个问题。
使用 UDF:
def convert_date(x):
mDt = datetime.datetime(1899, 12, 30)
dlt = mDt + datetime.timedelta(days=x)
return dlt.strftime("%Y-%m-%d")
convert_date_udf = udf(lambda z: convert_date(z), StringType())
df = df.withColumn('hire date', convert_date_udf('hire date').alias('hire date new'))
不使用 UDF:
df = df.withColumn('hire date', F.expr("date_add(to_date('1899-12-30'), cast(`hire date` as int))").cast(StringType())
希望对您有所帮助!
看起来像 12/30/1899 + 37823 天 = 2003/07/21
您可以使用下面的 date_add 函数代替 UDF 或 python 函数。 UDF 应该比 pyspark 函数慢一点。
weird_date = 37823
df = spark.createDataFrame([('1899-12-30',)], ['dt'])
df.select(date_add(df.dt, weird_date).alias('converted_date')).collect()