Невозможно успешно извлечь метку времени для даты и времени в pyspark - PullRequest
1 голос
/ 02 апреля 2020

У меня проблемы с извлечением времени и даты из метки времени. Данные читаются в виде строки, поэтому я увидел, что люди могут использовать date_format, чтобы по существу преобразовать их в нужный нам формат. Вот что я попробовал ниже

import pyspark.sql.functions as F
from pyspark.sql.functions import date_format

data = df_data.select(date_format(F.col("timestamp"),"MM/d/yy").alias("date"),
        date_format(F.col("timestamp"),"HH:mm").alias("time"),
        date_format(F.col("timestamp"), "M/d/yy").alias("current_date_formated")).show(10)

Мои входные данные выглядят так:

  timestamp
11/9/18 14:11
11/9/18 14:27
11/9/18 14:42
11/9/18 14:57

Вывод моего кода выше выводится как под моим date и time псевдонимом возвращает строки null. Я также пытался использовать to_date, но тоже не работал

import pyspark.sql.functions as F

data = df_data.select(date_format(F.col("timestamp"),"MM/d/yy").alias("date"),
        F.to_date(F.col("timestamp"),"HH:mm").alias("time"),
        F.to_date(F.col("timestamp"), "M/d/yy").alias("current_date_formated")).show(10)

1 Ответ

1 голос
/ 02 апреля 2020

У вас есть правильная идея с date_format. Единственное, что вам не хватает - это в первую очередь конвертировать строковую метку времени в тип метки времени . И тогда вы можете сделать свое форматирование. Я предположил, что ваш input data в формате день-месяц-год , если нет, вы можете переключить его на "MM/dd/yy HH:mm".

from pyspark.sql import functions as F
df.withColumn("timestamp", F.to_timestamp("timestamp","dd/MM/yy HH:mm"))\
  .withColumn("time",F.date_format("timestamp","HH:mm"))\
  .withColumn("current_date_formated",F.date_format("timestamp", "M/d/yy")).show()

+-------------------+-----+---------------------+
|          timestamp| time|current_date_formated|
+-------------------+-----+---------------------+
|2018-09-11 14:11:00|14:11|              9/11/18|
|2018-09-11 14:27:00|14:27|              9/11/18|
|2018-09-11 14:42:00|14:42|              9/11/18|
|2018-09-11 14:57:00|14:57|              9/11/18|
+-------------------+-----+---------------------+
...