簡體   English   中英

Scala-在Spark RDD中將字符串轉換為日期

[英]Scala - Convert String to Date in Spark RDD

我有一個數據集,正在讀取到一個火花RDD中,其中日期以“ 2016年9月”的格式表示,還有“ 20010901”,我需要在使用Case類創建RDD時將其轉換為日期格式

例如,案例類銀行(年齡:整數,工作:字符串,婚姻:字符串,學歷:字符串,出生日期:“ 20010901 ”,FiscalMonth:“ 2016年9月 ”)

如何將“ BirthDate”和“ FiscalMonth”轉換為Scala可以識別為Date的Date格式,而Date可能是這兩種格式的呢?

我需要稍后將其拉入spark sql並在其上運行一些查詢。

一種可行的方式:

case class Person(
               name:String,
               job:String,
               marital:String,
               birthDate:java.util.Date, 
               fiscalMonth:java.util.Date)

object Person {
  def converter(dt:String):java.util.Date = dt match {
    case x if x matches "\\d{8}" => (new java.text.SimpleDateFormat("yyyyMMdd",java.util.Locale.US)).parse(x)
    case x if x matches "\\w+\\s\\d{4}" => (new java.text.SimpleDateFormat("MMMM yyyy", java.util.Locale.US)).parse(x)
    case _ => throw new IllegalArgumentException
  }

  def apply(a:String,b:String,c:String,d:String,e:String) = new Person(
     a,b,c,converter(d),converter(e)
  )
}

val p = Person("john","clerk","married","20121111","September 2008")

會產生:

p: Person = Person(john,clerk,married,Sun Nov 11 00:00:00  GMT 2012,Mon Sep 01 00:00:00 GMT 2008)

並避免了從Stringjava.util.Date的不舒服的隱式轉換def。 此方法的問題是,您可能需要為后兩個參數實現所有可能的Date和String組合。 有避免這種情況的方法 但是我認為這應該適合您的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM