[英]Convert RDD[String] to RDD[Row] to Dataframe Spark Scala
[英]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)
并避免了从String
到java.util.Date
的不舒服的隐式转换def。 此方法的问题是,您可能需要为后两个参数实现所有可能的Date和String组合。 有避免这种情况的方法 。 但是我认为这应该适合您的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.