функция спарка: date_format не работает - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь использовать: org.apache.spark.sql.functions date_format для форматирования заданной строки Date, но это не работает:
вот код, который я выполняю:

val data = Seq("20190413","20190310","20190923").toDF
data.show 
    +--------+
    |   value|
    +--------+
    |20190413|
    |20190310|
    |20190923|
    +--------+
val data2=data.withColumn("date",date_format(col("value"),"yyyyMMdd"))
data2.show
    +--------+----+
    |   value|date|
    +--------+----+
    |20190413|null|
    |20190310|null|
    |20190923|null|
    +--------+----+

из документа сказано, что:

date_format (dateExpr: Столбец, формат: String): Столбец
Преобразование даты / отметки времени / строка соответствует значению строки в формате, заданном форматом даты, заданным вторым аргументом.

См. java.text.SimpleDateFormat для правильных шаблонов формата даты и времени.

Что не так с моим кодом?

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Если вы используете строки, они должны быть в формате ISO.Указанный вами формат применяется к выводу.

scala> val data=Seq("2019-04-13","2019-03-10","2019-09-23").toDF
scala> val data2=data3.
     |           withColumn("date",date_format(col("value"),"yyyyMMdd")).
     |           withColumn("date-US",date_format(col("value"),"MM/dd/yyyy"))
scala> data2.show()
+----------+--------+----------+
|     value|    date|   date-US|
+----------+--------+----------+
|2019-04-13|20190413|04/13/2019|
|2019-03-10|20190310|03/10/2019|
|2019-09-23|20190923|09/23/2019|
+----------+--------+----------+

РЕДАКТИРОВАТЬ

Если ваше строковое представление дат находится в каком-либо другом формате, вам, вероятно, потребуется преобразовать ихна правильный тип даты, а затем отформатируйте, как вам нравится.Например:

scala> val data2=data.withColumn("date-US",date_format(to_date(col("value"),"yyyyMMdd"),"MM/dd/yyyy"))
scala> data2.show()
+--------+----------+
|   value|   date-US|
+--------+----------+
|20190413|04/13/2019|
|20190310|03/10/2019|
|20190923|09/23/2019|
+--------+----------+

Формат, используемый в функции to_date(), - это формат input .

0 голосов
/ 24 сентября 2019

В Spark вы можете использовать unix_timestamp и from_unixtime

scala> data.withColumn("tt",from_unixtime(unix_timestamp(col("value"),"yyyyMMdd"),"yyyy/MM/dd")).show

+--------+----------+
|   value|        tt|
+--------+----------+
|20190413|2019/04/13|
|20190310|2019/03/10|
|20190923|2019/09/23|
+--------+----------+

, это правильный способ достижения желаемого результата. I

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...