Как разобрать дату и время? - PullRequest
2 голосов
/ 20 сентября 2019

Я пытаюсь проанализировать столбец даты, который в настоящее время набирает строку.Это в формате

2005-04-24T09: 12: 49Z

У меня Spark версии 2.1.И я попробовал следующее

spark.sql("SELECT TO_DATE(Date) FROM df").show()

Это возвращает 2005-04-24 , но без отметки времени.

Далее я попытался

val ts = unix_timestamp($"Date", "yyyy-dd-MM HH:mm:ss").cast("timestamp")
df.withColumn("Date", ts).show()

Это вернуло все нули

Затем я попытался

spark.sql("select TO_DATE(Date_Resulted, 'yyyy-MM-ddTHH:mm:ssZ') AS date from lab").show()

, но это только что вернуло ошибку:

org.apache.spark.sql.AnalysisException: Invalid number of arguments for function to_date; line 1 pos 7

Должен быть простой способ разобрать эту строкустолбец даты для возврата типа DateTime.Любая помощь будет высоко ценится

Ответы [ 2 ]

3 голосов
/ 20 сентября 2019

это будет работать:

val df = Seq("2005-04-24T09:12:49Z").toDF("date")

df
  .withColumn("date_converted", to_timestamp($"date", "yyyy-MM-dd'T'HH:mm:ss'Z'"))
  .show()

дает:

+--------------------+-------------------+
|                date|     date_converted|
+--------------------+-------------------+
|2005-04-24T09:12:49Z|2005-04-24 09:12:49|
+--------------------+-------------------+
3 голосов
/ 20 сентября 2019

Есть разные способы получить дату и время в Spark.

Давайте использовать следующие примеры данных:

val df=Seq("2005-04-24T09:12:49Z").toDF("time_stamp")
df.createOrReplaceTempView("tmp")

Дата из отметки времени

//in spark sql api
spark.sql("select to_date(time_stamp)dt from tmp").show()

//in dataframe api
df.withColumn("dt",to_date('time_stamp)).select("dt").show()

Result:
//+----------+
//|        dt|
//+----------+
//|2005-04-24|
//+----------+

получить дату и время изотметка времени - использование функций from_unixtime и unix_timestamp

//in spark sql api
spark.sql("""select timestamp(from_unixtime(unix_timestamp(time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'"),"yyyy-MM-dd hh:mm:ss")) as ts from tmp""").show()

//in dataframe api
df.withColumn("dt",from_unixtime(unix_timestamp('time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'"),"yyyy-MM-dd hh:mm:ss").cast("timestamp")).select("dt").show()

// Result:
// +-------------------+
// |                 ts|
// +-------------------+
// |2005-04-24 09:12:49|
// +-------------------+

получение даты и времени из отметки времени - использование функции unix_timestamp

//in spark sql api    
spark.sql("""select timestamp(unix_timestamp(time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'")) as ts from tmp""").show()

//in dataframe api
df.withColumn("dt",unix_timestamp('time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'").cast("timestamp")).select("dt").show()

// Result:
// +-------------------+
// |                 ts|
// +-------------------+
// |2005-04-24 09:12:49|
// +-------------------+

получение даты и времени из отметки времени - использование функции to_timestamp

//in spark sql api
spark.sql("select to_timestamp(time_stamp)ts from tmp").show()

//in dataframe api
df.withColumn("dt",to_timestamp('time_stamp)).select("dt").show()

// Result:
// +-------------------+
// |                 ts|
// +-------------------+
// |2005-04-24 04:12:49|
// +-------------------+

получить дату и время из отметки времени - Использование функции to_timestamp с указанным форматом

//in spark sql api
spark.sql("""select to_timestamp(time_stamp,"yyyy-MM-dd'T'hh:mm:ss'Z'")ts from tmp""").show()

//in dataframe api
df.withColumn("dt",to_timestamp($"time_stamp","yyyy-MM-dd'T'hh:mm:ss'Z'")).select("dt").show()

// Result:
// +-------------------+
// |                 ts|
// +-------------------+
// |2005-04-24 09:12:49|
// +-------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...