Как изменить дату с гггг-мм-дд на дд-мм-ггг с помощью функции Spark - PullRequest
3 голосов
/ 26 июня 2019

Я работаю над проектом Apache Spark на Eclipse, используя Scala

Я хотел бы изменить формат даты с yyyy-mm-dd на dd-mm-yyyy

Это мой код:

val conf = new SparkConf().setMaster("local").setAppName("trying")
val sc = new SparkContext(conf) 
val x = 
sc.textFile("/home/amel/1MB")
.filter(!_.contains("NULL")).filter(!_.contains("Null"))

val re = x.map(row => {
val cols = row.split(",")
val Cycle = cols(2)
val Duration = Cycle match {
case "Licence" => "3 years"
case "Master" => "2 years"
case "Ingéniorat" => "5 years"
case "Ingeniorat" => "5 years"
case "Doctorat" => "3 years"
case _ => "NULL" }
(cols(0)+","+cols(1) + "," + Cycle + "," +  cols(3) + "," 
+Duration)
})
re.collect.foreach(println)

Это пример результата, который я получил:

0000023497,2007-06-27,Master,SI,2 years

Это то, что я хочу, чтобы мой результат выглядел как

0000023497,27-06-2007,Master,SI,2 years

Ответы [ 3 ]

3 голосов
/ 26 июня 2019

Может быть сделано с помощью регулярных выражений.

val ymd = raw"(\d+)-(\d+)-(\d+)".r

ymd.replaceAllIn("2007-06-27", m => s"${m group 3}-${m group 2}-${m group 1}")
//res0: String = 27-06-2007

Также может быть сделано с помощью java.time форматирования библиотеки.

import java.time.LocalDate
import java.time.format.DateTimeFormatter

LocalDate.parse("2019-01-04")
         .format(DateTimeFormatter.ofPattern("dd-MM-yyyy"))
//res1: String = 04-01-2019
2 голосов
/ 27 июня 2019

Использование org.apache.spark.sql.functions.date_format функция

Пример:

scala> df.show
+----------+
|      date|
+----------+
|2019-06-25|
|2019-06-26|
|2019-06-27|
+----------+

scala> df.withColumn("date2", org.apache.spark.sql.functions.date_format($"date", "dd-MM-yyyy")).show
+----------+----------+
|      date|     date2|
+----------+----------+
|2019-06-25|25-06-2019|
|2019-06-26|26-06-2019|
|2019-06-27|27-06-2019|
+----------+----------+
1 голос
/ 26 июня 2019

Вот альтернатива Scala 2.13 через сопоставление с шаблоном без применения интерполятора строк :

"2007-06-27" match { case s"$year-$month-$day" => s"$day-$month-$year" }
// "27-06-2007"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...