Как преобразовать список объектов в DF в спарк? - PullRequest
0 голосов
/ 04 апреля 2020

Используя spark 2.4.X, один из сложных объектов имеет поле типа Joda `DateTime`.

Я хочу преобразовать этот сложный объект в DF. Ниже приведен пример фрагмента:

import spark.implicits._
import org.joda.time.{DateTime, DateTimeZone}
case class JodaTuple(n: Int, dt: org.joda.time.DateTime)
val futureDate = new DateTime(2200, 1, 1, 0, 0, DateTimeZone.UTC)
List(JodaTuple(1, futureDate)).toDF("n", "t").show()

Но с исключением:

java.lang.UnsupportedOperationException: No Encoder found for org.joda.time.DateTime
- field (class: "org.joda.time.DateTime", name: "dt")
- root class: "JodaTuple"

1 Ответ

0 голосов
/ 04 апреля 2020

Spark использовал "java. sql .Timestamp" для "TimestampType", тип Joda может быть преобразован:

List((1, new java.sql.Timestamp(futureDate.getMillis))).toDF("n", "t").show(false)

В случае немного сложного объекта можно создать СДР объектов и сопоставлены с типами искр:

spark.sparkContext.parallelize(
   List(JodaTuple(1, futureDate))
 )
.map(r=>(r.n, new java.sql.Timestamp(r.t.getMillis)))
.toDF("n", "t").show(false)
...