我需要填充失败的时间戳日期。因为当日期值不正确时,unix_timestamp填充"null"。在这种情况下,我想在时间戳中填充实际失败的日期值而不是"null"。
数据帧:
id,date
1,161129
2,961209
3,110620
4,160928
5,021002
6,160421
7,160121
8,100903
9,077707
这里的 ID 9 有不正确的数据,这些数据不在日期格式中。 因此,如果我使用 unix_timestamp("date",yymmdd).cast("timestamp")
它会返回第 9 行的null
。 但是如果失败,我想要精算日期。 即"077707">
预期产出
+---+-------------------+
| id| date|
+---+-------------------+
| 1|2016-11-29 00:00:00|
| 2|1996-12-09 00:00:00|
| 3|2011-06-20 00:00:00|
| 4|2016-09-28 00:00:00|
| 5|2002-10-02 00:00:00|
| 6|2016-04-21 00:00:00|
| 7|2016-01-21 00:00:00|
| 8|2010-09-03 00:00:00|
| 9|077707 |
+---+-------------------+
您可以使用条件(时间/否则(来选择原始或解析的日期值。 它看起来像这样:
from pyspark.sql.functions import unix_timestamp, when, col
data = [
('1', '161129'),
('2', '961209'),
('3', '110620'),
('4', '160928'),
('5', '021002'),
('6', '160421'),
('7', '160121'),
('8', '100903'),
('9', '077707')
]
df = spark.createDataFrame(sc.parallelize(data), ['id', 'date'])
df = df.withColumn('parsed', unix_timestamp('date', 'yyMMdd').cast('timestamp'))
df = df.withColumn('combined', when(col('parsed').isNull(), col('date'))
.otherwise(col('parsed')))
df.show(100, False)