Pyspark 将列类型从日期更改为字符串
Pyspark changing type of column from date to string
我有以下数据框:
corr_temp_df
[('vacationdate', 'date'),
('valueE', 'string'),
('valueD', 'string'),
('valueC', 'string'),
('valueB', 'string'),
('valueA', 'string')]
现在我想将 vacationdate 列的数据类型更改为字符串,以便数据框也采用这种新类型并覆盖所有条目的数据类型数据。例如。写完后:
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_format
函数:
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_format
:
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()
请注意它正在使用 C standard format not a Java simple date format
我有以下数据框:
corr_temp_df
[('vacationdate', 'date'),
('valueE', 'string'),
('valueD', 'string'),
('valueC', 'string'),
('valueB', 'string'),
('valueA', 'string')]
现在我想将 vacationdate 列的数据类型更改为字符串,以便数据框也采用这种新类型并覆盖所有条目的数据类型数据。例如。写完后:
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_format
函数:
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_format
:
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()
请注意它正在使用 C standard format not a Java simple date format