2017-05-26 69 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")) 
相关问题