我正在尝试使用 to_date
函数,但返回空值。
df.createOrReplaceTempView("incidents")
spark.sql("select Date from incidents").show()
+----------+
| Date|
+----------+
|08/26/2016|
|08/26/2016|
|08/26/2016|
|06/14/2016|
spark.sql("select to_date(Date) from incidents").show()
+---------------------------+
|to_date(CAST(Date AS DATE))|
+---------------------------+
| null|
| null|
| null|
| null|
日期列采用字符串格式:
|-- Date: string (nullable = true)
11条答案
按热度按时间mgdq6dx11#
你也可以做这个查询。。。!
wfveoks02#
你可以这么做
df.withColumn("date", date_format(col("string"),"yyyy-MM-dd HH:mm:ss.ssssss")).show()
9rnv2umw3#
也可以传递日期格式
例如
x7rlezfr4#
因为您的主要目的是将Dataframe中的列类型从字符串转换为时间戳,所以我认为这种方法会更好。
你也可以用
to_timestamp
(我认为spark2.x提供了这一功能)如果您需要细粒度的时间戳。jc3wubiy5#
sai kiriti badam提出的上述解决方案对我有效。
我正在使用azuredatabricks读取从eventhub捕获的数据。它包含一个名为enqueuedtimeutc的字符串列,格式如下。。。
2018年12月7日下午12:54:13
我用的是python笔记本,用的是以下内容。。。
... 要使用以下格式的数据创建“timestamp”类型的新列enqueuedtimestamp。。。
2018-12-07 12:54:13
gab6jxml6#
在pyspark中使用下面的函数将数据类型转换为所需的数据类型。在这里,我将所有日期数据类型转换为timestamp列。
pepwfjgg7#
我在没有temp表/视图和dataframe函数的情况下解决了同样的问题。
当然,我发现只有一种格式适用于这个解决方案,那就是
yyyy-MM-DD
.例如:
时间戳当然有
00:00:00.0
作为时间值。hmae6n7t8#
我个人发现在使用spark 1.6时,使用从dd-mmm-yyyy格式到yyyy-mm-dd格式的基于unix时间戳的日期转换时出现了一些错误,但这可能会扩展到最新版本。下面我将介绍一种使用java.time解决问题的方法,该方法应适用于spark的所有版本:
在执行以下操作时,我看到了错误:
下面是说明错误的代码,以及我的解决方案。首先,我以一种通用的标准文件格式读入股市数据:
以下是有问题的日期转换:
齐柏林飞艇制造的图表显示了尖峰,这是错误。
下面是显示日期转换错误的检查:
在这个结果之后,我用这样的自定义项切换到java.time转换,这对我很有用:
现在我将其注册为一个函数,以便在sql中使用:
并检查结果,然后重新运行测试:
我重新运行图表,看看是否有错误/尖峰:
如您所见,没有更多的尖峰或错误。我现在使用自定义项,正如我所展示的那样,将我的日期格式转换应用到标准的yyyy-mm-dd格式,并且从那以后就没有任何错误了。:-)
nimxete29#
dateid为int列包含int格式的日期
6jjcrrmo10#
使用
to_date
使用javaSimpleDateFormat
.例子:
iibxawm411#
找到下面提到的代码,可能会对您有所帮助。