apache-spark - 如何在火花中将对象列表转换为DF?
问题描述
使用 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"
解决方案
Spark使用“java.sql.Timestamp”作为“TimestampType”,Joda类型可以转换:
List((1, new java.sql.Timestamp(futureDate.getMillis))).toDF("n", "t").show(false)
如果对象有点复杂,可以创建对象的 RDD,并映射到 Spark 类型:
spark.sparkContext.parallelize(
List(JodaTuple(1, futureDate))
)
.map(r=>(r.n, new java.sql.Timestamp(r.t.getMillis)))
.toDF("n", "t").show(false)
推荐阅读
- java - onOptionsItemSelected() 方法不会在 Fragment 上被调用
- python-3.x - 我们如何使用 Python 或 Flask 通过网络浏览器播放 IP 摄像机的实时流(RTSP 链接)?
- java - 创建具有更大对象标头的自定义 JVM
- java - e(fx)clipse css 自动完成功能不起作用且属性未知
- c# - 从异步调用收集响应时使用的数据结构
- r - 合并两个无名向量时,它会被拆分而不是 1 列
- python - 列出数据框中缺失值为“?”的列
- vb.net - System.Windows.Forms.dll 中的 System.InvalidCastException' - AutoCompleteMode 文本框
- d3.js - 如何为时间序列设置比例,当前 x 比例给我 NaN?
- node.js - 修改锚标记、href 的 URL 时 Ejs 文件未呈现