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中将字符串类型从字符串更改为日期的最佳方法是什么?谢谢:)