将各种日期格式转换为pyspark中的通用日期格式
Convert various dateformats to a common date format in pyspark
Spark SQL - 2.3 and 2.2. PySpark.
一个日期是 2019-11-19
,另一个是 2019-11-19T17:19:39.214841000000
。
需要将两者都转换为 yyyy-MM-ddThh:mm:ss.SSSSSSSS
需要在spark.sql(select ......)
中使用
到目前为止已经尝试了大约 20 个选项,但都给出了 null。
尝试过:
from_utc_timestamp(A.SE_TS, 'UTC')
from_unixtime(A.SE_TS, 'yyyy-MM-dd HH:mm:ss')
from_unixtime(A.SE_TS)
to_date(A.SE_TS, 'yyyy-MM-dd HH:mm:ss')
to_date(A.SE_TS, 'yyyy-MM-dd hh:mm:ss.SSSS') (In many combinations of upper and lowercase)
from_unixtime(unix_timestamp(), "y-MM-dd'T'hh:mm:ssZ") - Gives syntax issues on ""
所有人都给空。
编辑:
数据:
+--------------------------------+-------------+
|A.SE_TS |B.SE_TS |
+--------------------------------+-------------+
|2019-11-19T17:19:39.214841000000|2019-11-19 |
+--------------------------------+-------------+
这里是:
Java's Simple Date Format supports only second precision
但是,您仍然可以通过这种方式将字符串解析为时间戳:
df.withColumn("date", F.to_timestamp(F.lit("2019-11-19T17:19:39.214841000000"), "yyyy-MM-dd'T'HH:mm:ss")).select("date").show(5)
+-------------------+
| date|
+-------------------+
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
+-------------------+
您可以像上面link中提到的那样编写一个自定义函数,它可以让您使用时间戳中的微秒进行排序。
请参考:pault's answer on Convert date string to timestamp in pySpark
编辑:
我也试过 spark.sql(query)
:
df = df.withColumn("date_string", F.lit("2019-11-19T17:19:39.214841000000"))
df.registerTempTable("df")
query = """SELECT to_timestamp(date_string, "yyyy-MM-dd'T'HH:mm:ss") as time from df limit 3"""
spark.sql(query).show()
+-------------------+
| time|
+-------------------+
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
+-------------------+
Spark SQL - 2.3 and 2.2. PySpark.
一个日期是 2019-11-19
,另一个是 2019-11-19T17:19:39.214841000000
。
需要将两者都转换为 yyyy-MM-ddThh:mm:ss.SSSSSSSS
需要在spark.sql(select ......)
到目前为止已经尝试了大约 20 个选项,但都给出了 null。
尝试过:
from_utc_timestamp(A.SE_TS, 'UTC')
from_unixtime(A.SE_TS, 'yyyy-MM-dd HH:mm:ss')
from_unixtime(A.SE_TS)
to_date(A.SE_TS, 'yyyy-MM-dd HH:mm:ss')
to_date(A.SE_TS, 'yyyy-MM-dd hh:mm:ss.SSSS') (In many combinations of upper and lowercase)
from_unixtime(unix_timestamp(), "y-MM-dd'T'hh:mm:ssZ") - Gives syntax issues on ""
所有人都给空。
编辑: 数据:
+--------------------------------+-------------+
|A.SE_TS |B.SE_TS |
+--------------------------------+-------------+
|2019-11-19T17:19:39.214841000000|2019-11-19 |
+--------------------------------+-------------+
这里是:
Java's Simple Date Format supports only second precision
但是,您仍然可以通过这种方式将字符串解析为时间戳:
df.withColumn("date", F.to_timestamp(F.lit("2019-11-19T17:19:39.214841000000"), "yyyy-MM-dd'T'HH:mm:ss")).select("date").show(5)
+-------------------+
| date|
+-------------------+
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
+-------------------+
您可以像上面link中提到的那样编写一个自定义函数,它可以让您使用时间戳中的微秒进行排序。
请参考:pault's answer on Convert date string to timestamp in pySpark
编辑:
我也试过 spark.sql(query)
:
df = df.withColumn("date_string", F.lit("2019-11-19T17:19:39.214841000000"))
df.registerTempTable("df")
query = """SELECT to_timestamp(date_string, "yyyy-MM-dd'T'HH:mm:ss") as time from df limit 3"""
spark.sql(query).show()
+-------------------+
| time|
+-------------------+
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
|2019-11-19 17:19:39|
+-------------------+