在Apache Spark中保留DenseMatrix

时间:2016-01-21 05:59:45

标签: apache-spark apache-spark-mllib

是否有建议/证明是有效的格式或机制来在Apache Spark中持久化DenseMatrix?或者我应该把它写进一个文件?

我在SVD操作后生成DenseMatrix,需要在用户查询进入时引用它,因此会经常查找。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果DenseMatrix表示org.apache.spark.mllib.linalg.DenseMatrix(V),则它是本地数据结构,并且没有Spark特定的方式来处理这种类型的对象。

处理它的一种方法是将序列化对象直接写入文件:

val oos = new java.io.ObjectOutputStream(
  new java.io.FileInputStream("/tmp/foo")))

oos.writeObject(svd.V)
oos.close()

稍后使用FileInputStreamObjectInputStream.readObject阅读。您还可以使用您选择的人类可读序列化,如JSON:

import net.liftweb.json.{NoTypeHints, Serialization}
import net.liftweb.json.Serialization.{read, write}
implicit val formats = Serialization.formats(NoTypeHints)

val serialized: String = write(svd.V) 
// Write to file and read if needed
...
// Deserialize 
val deserialized = read[DenseMatrix](serialized)