簡體   English   中英

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列的數據類型更改為String,以便數據框也采用此新類型並覆蓋所有條目的數據類型數據。 例如寫后:

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標准格式,而不是Java 簡單的日期格式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM