Преобразование значения Timestamp в значение Double в Scala

0

Итак, я изменил "t", то есть TimeStamp, и мне нужно преобразовать его в Double. Я определил этот класс:

case class RawData(sessionId: String,
                   t: Double,
                   channel: Int,
                   signalName: String,
                   physicalValue: Double,
                   messageId: Long,
                   vehicleId: String)

И у меня проблема с приведением "t" к двойному в этом коде:

def raw(): Unit = {
    import rawData.sqlContext.implicits._
//TODO solve timestamp
    val datDMY = rawData
      .map(row => {
        cal.setTimeInMillis(row.t.)
        RawDataExtended(
          row.sessionId,
          row.t,
          row.channel,
          row.signalName,
          row.physicalValue,
          row.messageId,
          cal.get(Calendar.YEAR),
          cal.get(Calendar.MONTH) + 1,
          cal.get(Calendar.DAY_OF_MONTH)
        )
      })
0

Может быть, это может вам помочь:

  case class InputModel(id: Int, time: Timestamp)
  case class Foo(id: Int, timeLong: Long, timeDouble: Double)

  val xs = Seq((1, Timestamp.from(Instant.now())), (2, Timestamp.from(Instant.now()))).toDF("id", "time")

  val ys = xs
    .select('id, 'time cast (DataTypes.LongType) as "timeLong", 'time cast (DataTypes.DoubleType) as "timeDouble")
    .as[Foo]

  val zs = xs
    .as[InputModel]
    .map(row => {
      Foo(row.id, row.time.getTime.toLong, row.time.getTime.toDouble)
    })

  xs.show(false)
  ys.show(false)
  zs.show(false)

Хотя будьте осторожны с часовыми поясами, а также с точностью при преобразовании в Double - обратите внимание, как Timestampt представлен как Long по сравнению с Double.