Scala问题: 提取JSON数据并将其存储到case类中,时间字符串数据需要转换为sql时间戳 Spark数据帧和Salat DAO / Mongo DB商店的Java / Joda日期。
两者都不支持彼此格式。
目前我们正在使用两个案例类:
case class A(a:int, b:string, time:java.sql.timestamp)
case class B(a:int, b:string, time:java.util.Date)
因此,Json Extractor方法根据商店类型Spark / Mongo
填充上述两个案例类中的任何一个有没有更好的方法来解决这个问题? (复合类是单向的,但它又是嵌套的)
请注意,案例类甚至可以是嵌套的(包含C和D的A,其中可以包含时间参数)
答案 0 :(得分:0)
我会首先考虑应用程序域。 Timestamp
或Date
是一个实施细节,具体取决于您的数据存储。
我建议的解决方案是
case class MyDomainObject(a: Int, b: String, time: java.util.Instant)
object MyDomainObject {
def fromMongoObject(o: MyDomainMongoObject): MyDomainObject = ???
def fromSparkObject(o: MyDomainSparkObject): MyDomainObject = ???
}
(注意,我选择java.util.Instant
为例,你可以选择你喜欢的任何时间表示。
处理Mongo / Spark的类/函数将分别在MyDomainMongoObject
和MyDomainSparkObject
中提取对象,然后使用随播对象中的方法对其进行转换。这样,您只需考虑一种特定类型的时间表示,即可保持域清洁,但每个数据存储适配器都可以使用自己的类型。