Spark SQL - DataFrame - Как читать другой формат даты формата - PullRequest
0 голосов
/ 11 октября 2018

Набор данных выглядит следующим образом.застрял в изменении HIRE_DATE формат в поле формата даты

EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,PHONE_NUMBER,HIRE_DATE,JOB_ID,SALARY,COMMISSION_PCT,MANAGER_ID,DEPARTMENT_ID
100,Steven,King,SKING,515.123.4567,17-JUN-03,AD_PRES,24000, - , - ,90
101,Neena,Kochhar,NKOCHHAR,515.123.4568,21-SEP-05,AD_VP,17000, - ,100,90

И фрагмент кода

    val empData = sparkSession.read.option("header", "true").option("inferSchema", "true").
   csv(filePath)empData.printSchema()

Выход printSchema дает строку для поля HIRE_DATE.Но я ожидаю Dateformat поле.Как я могу изменить?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Spark имеет свой собственный тип даты.Если вы указали значение даты в строке формата «гггг-ММ-дд», оно может быть преобразовано в тип даты Spark.Поэтому все, что вам нужно сделать, это перевести входную строку даты в этот формат "гггг-ММ-дд". А для форматирования времени и даты всегда лучше использовать библиотеки java.time.Смотри ниже

  val df = spark.read.option("inferSchema",true).option("header", true).csv("in/emp2.txt")

  def formatDate(x:String):String =
  {
   val y = x.toLowerCase.split('-').map(_.capitalize).mkString("-")
   val z= java.time.LocalDate.parse(y,java.time.format.DateTimeFormatter.ofPattern("dd-MMM-yy"))
   z.toString
  }
  val myudfDate = udf ( formatDate(_:String):String )
  val df2 = df.withColumn("HIRE_DATE2", date_format(myudfDate('HIRE_DATE),"yyyy-MM-dd") )
  df2.show(false)


+-----------+----------+---------+--------+------------+---------+-------+------+--------------+----------+-------------+----------+
|EMPLOYEE_ID|FIRST_NAME|LAST_NAME|EMAIL   |PHONE_NUMBER|HIRE_DATE|JOB_ID |SALARY|COMMISSION_PCT|MANAGER_ID|DEPARTMENT_ID|HIRE_DATE2|
+-----------+----------+---------+--------+------------+---------+-------+------+--------------+----------+-------------+----------+
|100        |Steven    |King     |SKING   |515.123.4567|17-JUN-03|AD_PRES|24000 | -            | -        |90           |2003-06-17|
|101        |Neena     |Kochhar  |NKOCHHAR|515.123.4568|21-SEP-05|AD_VP  |17000 | -            |100       |90           |2005-09-21|
+-----------+----------+---------+--------+------------+---------+-------+------+--------------+----------+-------------+----------+
0 голосов
/ 11 октября 2018

Вот как я это делаю:

import java.text.SimpleDateFormat

val dateFormat = new SimpleDateFormat("dd-MMM-yy")

def convertStringToDate(StringDate:String) = {
    val parsed = dateFormat.parse(StringDate)
    new java.sql.Date(parsed.getTime())
} 

val convertStringToDateUDF = udf(convertStringToDate _)

df.withColumn("HIRE_DATE",convertStringToDateUDF($"HIRE_DATE"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...