2017-05-26 68 views
1

我有一個數據幀有一列A被定義爲字符串列類型,但列中的數據實際上是日期。例如,列A爲「20170506」,我想將列A轉換爲日期類型。第一,我使用了下面的方法:在DataFrames中將字符串類型從字符串更改爲日期的最佳方式是什麼?

df = df1.withColumn('A', df['A'].cast(DateType()) 

其結果是,A列的所有項轉換爲null。我查了一下spark API的官方文檔,發現列A的格式應該是'yyyy-MM-dd',就像「2017-05-06」一樣。

所以,我用了另一種方式:

# 1. use udf function 
func = udf (lambda x: datetime.strptime(x, '%Y-%m-%d'), DateType()) 
df = df1.withColumn('A', func(col('A'))) 
# 2. use to_date function 
df.select(to_date(from_unixtime(unix_timestamp(df['A'], 'yyyy-MM-dd'))).alias('A')) 

我不認爲無論哪種方式是一個好主意,因爲它的每一個複雜的,而不是短暫的。

爲什麼to_date(col)不能設置列字符串的格式,就像這樣:to_date(col, 'yyyy-MM-dd'),我認爲這是對我們非常重要(順便說一下,蜂房SQL無法設定呢!)。

而且,什麼是在DataFrames中將字符串類型從字符串更改爲日期的最佳方法是什麼?謝謝:)

回答

0

您可以通過使用函數TO_DATE

dataframe.select(to_date($"dateCol", "dd-MMM-yyyy").alias("date")) 

或字符串更改數據類型爲日期,您可以使用UNIX_TIMESTAMP

dataframe.select(to_date(unix_timestamp($"datecol", "dd-MMM-yyyy").cast("timestamp")).alias("timestamp")) 
相關問題