如何在 pyspark 中填充失败的时间戳日期而不是"null"



我需要填充失败的时间戳日期。因为当日期值不正确时,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)

相关内容

  • 没有找到相关文章

最新更新