使用 Matrix 作为 Spark SQL Dataframe 中的列

Using MatrixUDT as column in SparkSQL Dataframe

我正在尝试将一组医学图像加载到 spark SQL 数据框中。这里每个图像都被加载到数据帧的矩阵列中。我看到 spark 最近添加了 MatrixUDT 来支持这种情况,但我没有找到在数据框中使用的示例。

https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/linalg/MatrixUDT.scala

谁能帮我解决这个问题。

非常感谢您的帮助。

谢谢

卡尔提克·瓦德拉

实际上 MatrixUDT 从 1.4 开始就是 o.a.s.mllib.linalg 的一部分,直到最近才被复制到 o.a.s.ml.linalg。因为它从来没有 public 你甚至不能声明一个正确的模式所以我严重怀疑它是为一般应用程序设计的。更不用说 API 可以说在实践中是有限的。

尽管如此,基本转换工作得很好,所以您只需要一个 RDD 或 Seq 产品类型(同样无法定义模式),您就可以开始了:

import org.apache.spark.ml.linalg.Matrices


Seq((1, Matrices.dense(2, 2, Array(1, 2, 3, 4)))).toDF
// org.apache.spark.sql.DataFrame = [_1: int, _2: matrix]

Seq((1, Matrices.dense(2, 2, Array(1, 2, 3, 4)))).toDS
// org.apache.spark.sql.Dataset[(Int, org.apache.spark.ml.linalg.Matrix)]
//   = [_1: int, _2: matrix]