Python Pypark将列的类型从日期更改为字符串

Python Pypark将列的类型从日期更改为字符串,python,apache-spark,apache-spark-sql,pyspark,Python,Apache Spark,Apache Spark Sql,Pyspark,我有以下数据帧: corr_temp_df [('vacationdate', 'date'), ('valueE', 'string'), ('valueD', 'string'), ('valueC', 'string'), ('valueB', 'string'), ('valueA', 'string')] 现在,我想将vacationdate列的数据类型更改为String,以便dataframe也采用这种新类型并覆盖所有条目的数据类型数据。例如,在写完之后: corr_te

我有以下数据帧:

corr_temp_df
[('vacationdate', 'date'),
 ('valueE', 'string'),
 ('valueD', 'string'),
 ('valueC', 'string'),
 ('valueB', 'string'),
 ('valueA', 'string')]
现在,我想将vacationdate列的数据类型更改为String,以便dataframe也采用这种新类型并覆盖所有条目的数据类型数据。例如,在写完之后:

corr_temp_df.dtypes
应覆盖vacationdate的数据类型


我已经使用了cast、StringType或astype等函数,但没有成功。你知道怎么做吗?

让我们创建一些虚拟数据:

import datetime
from pyspark.sql import Row
from pyspark.sql.functions import col

row = Row("vacationdate")

df = sc.parallelize([
    row(datetime.date(2015, 10, 07)),
    row(datetime.date(1971, 01, 01))
]).toDF()
如果Spark>=1.5.0,则可以使用
date\u格式
功能:

from pyspark.sql.functions import date_format

(df
   .select(date_format(col("vacationdate"), "dd-MM-YYYY")
   .alias("date_string"))
   .show())
在Spark<1.5.0中,可以使用Hive UDF完成:

df.registerTempTable("df")
sqlContext.sql(
    "SELECT date_format(vacationdate, 'dd-MM-YYYY') AS date_string FROM df")
当然,它在Spark>=1.5.0中仍然可用

如果不使用
HiveContext
,则可以使用UDF模拟
date\u格式

from pyspark.sql.functions import udf, lit
my_date_format = udf(lambda d, fmt: d.strftime(fmt))

df.select(
    my_date_format(col("vacationdate"), lit("%d-%m-%Y")).alias("date_string")
).show()
请注意,它使用的不是Java