scala - Scala Spark DataFrame Map Encoder 非原始类型
问题描述
我有一个 Scala Spark DataFrame(变量df
):
id, values
"a", [0.5, 0.6]
"b", [0.1, 0.2]
...
我正在尝试利用RowMatrix有效地计算成对余弦相似度。
final case class dataRow(id: String, values: Array[Double])
val rows = df.as[dataRow].map {
row => {
Vectors.dense(row.values)
}
}.rdd
我有以下编译错误
Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._
最终,我可以做到这一点(RowMatrix 需要一个 RDD[Vector])
val mat = new RowMatrix(rows)
我已经导入了 spark.implicits_,我做错了什么?
解决方案
类型根本没有隐式编码器Vector
。所以要么在`rdd之后推送地图
val rows = df.as[dataRow].rdd.map(row => Vectors.dense(row.values))
或提供一个Encoder
import org.apache.spark.sql.Encoder
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
ds.as[dataRow].map(x => Vectors.dense(x.values))(ExpressionEncoder(): Encoder[Vector])
推荐阅读
- qt - Qt 设计器中的 QPushButton
- css - 无法使 React Native 背景全屏
- vue.js - 带有 laravel sanctum 的 Nuxt 身份验证引发安装错误
- java - 斯卡拉 | 如何将此代码放入宏注释中?
- discord.py - discord python:guild.members 只返回机器人但没有成员
- python - 如何将 pandas DataFrame 列乘以单个值?
- gcloud - `gcloud compute instances create-with-container`正在记录到stackdriver,但不包括内存信息?
- python - ValueError:尺寸必须相等,但为 244 和 15 ....... 输入形状:[?,244], [?,15]
- python-3.x - Python 中的哪些代码可以使用 Photoshop 将文件保存为 RGB 颜色模式和 300 dpi 的 jpeg?
- excel - Excel公式添加和减去产品成本的百分比