2015-10-06 63 views
4

我有以下數據框:Pyspark更改列的類型從日期字符串

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這樣的函數,但是我沒有成功。你知道怎麼做嗎?

回答

6

讓我們創建一些虛擬的數據:

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() 

如果您星火> = 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()) 

火花< 1.5.0它可以使用蜂巢完成UDF:

df.registerTempTable("df") 
sqlContext.sql(
    "SELECT date_format(vacationdate, 'dd-MM-YYYY') AS date_string FROM df") 

它當然在Spark> = 1.5.0中仍然可用。

如果你不使用HiveContext您可以使用模擬date_format UDF:

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不是Java simple date format

相關問題