Spark 2.2 从 unix_timestamp 提取日期无效
Spark 2.2 extracting date not working from unix_timestamp
在 Spark 2.2 中,无法从 unix_timestamp 提取日期
输入数据:
+-------------------------+
|UPDATE_TS |
+-------------------------+
|26NOV2009:03:27:01.154410|
|24DEC2012:00:47:46.805710|
|02MAY2013:00:45:33.233844|
|21NOV2014:00:33:39.350140|
|10DEC2013:00:30:30.532446|
我尝试了以下方法,但输出结果为 null
查询累了:
火花sql
sqlContext.sql("select from_unixtime(unix_timestamp(UPDATE_TS,'ddMMMyyyy:HH:MM:SS.ssssss'), 'yyyy') as new_date from df_vendor_tab").show()
DSL:
df_id.withColumn('part_date', from_unixtime(unix_timestamp(df_id.UPDATE_TS, "ddMMMyyyy:HH:MM:SS.sss"), "yyyy"))
预期输出:
2009
2012
2013
2014
2013
简单的 spark-sql 与 unix_timestamp 和 from_unixtime
一起工作正常
sqlContext.sql("Select from_unixtime(unix_timestamp('26NOV2009:03:27:01.154410', 'ddMMMyyyy'), 'yyyy')").show
输出:
+----+
| _c0|
+----+
|2009|
+----+
因为你要的是提取年份,我没有考虑小时、分钟、秒...
您使用的格式字符串不正确。资本 M
是一个月。小写 m
表示分钟。
以下方法可行:
from pyspark.sql.functions import from_unixtime, unix_timestamp, to_date
df_id.withColumn(
'part_date',
from_unixtime(unix_timestamp(df_id.UPDATE_TS, "ddMMMyyyy:HH:mm:SS.SSSSSS"), "yyyy")
).show(truncate=False)
#+-------------------------+---------+
#|UPDATE_TS |part_date|
#+-------------------------+---------+
#|26NOV2009:03:27:01.154410|2009 |
#|24DEC2012:00:47:46.805710|2012 |
#|02MAY2013:00:45:33.233844|2013 |
#|21NOV2014:00:33:39.350140|2014 |
#|10DEC2013:00:30:30.532446|2013 |
#+-------------------------+---------+
在 Spark 2.2 中,无法从 unix_timestamp 提取日期 输入数据:
+-------------------------+
|UPDATE_TS |
+-------------------------+
|26NOV2009:03:27:01.154410|
|24DEC2012:00:47:46.805710|
|02MAY2013:00:45:33.233844|
|21NOV2014:00:33:39.350140|
|10DEC2013:00:30:30.532446|
我尝试了以下方法,但输出结果为 null
查询累了:
火花sql
sqlContext.sql("select from_unixtime(unix_timestamp(UPDATE_TS,'ddMMMyyyy:HH:MM:SS.ssssss'), 'yyyy') as new_date from df_vendor_tab").show()
DSL:
df_id.withColumn('part_date', from_unixtime(unix_timestamp(df_id.UPDATE_TS, "ddMMMyyyy:HH:MM:SS.sss"), "yyyy"))
预期输出:
2009
2012
2013
2014
2013
简单的 spark-sql 与 unix_timestamp 和 from_unixtime
一起工作正常sqlContext.sql("Select from_unixtime(unix_timestamp('26NOV2009:03:27:01.154410', 'ddMMMyyyy'), 'yyyy')").show
输出:
+----+ | _c0| +----+ |2009| +----+
因为你要的是提取年份,我没有考虑小时、分钟、秒...
您使用的格式字符串不正确。资本 M
是一个月。小写 m
表示分钟。
以下方法可行:
from pyspark.sql.functions import from_unixtime, unix_timestamp, to_date
df_id.withColumn(
'part_date',
from_unixtime(unix_timestamp(df_id.UPDATE_TS, "ddMMMyyyy:HH:mm:SS.SSSSSS"), "yyyy")
).show(truncate=False)
#+-------------------------+---------+
#|UPDATE_TS |part_date|
#+-------------------------+---------+
#|26NOV2009:03:27:01.154410|2009 |
#|24DEC2012:00:47:46.805710|2012 |
#|02MAY2013:00:45:33.233844|2013 |
#|21NOV2014:00:33:39.350140|2014 |
#|10DEC2013:00:30:30.532446|2013 |
#+-------------------------+---------+