0

我得到一个 DataFrame contians Tuple(String, org.apache.spark.ml.regression.LinearRegressionModel)

val result = rows.map(row => {
  val userid = row.getString(0)
  val frame = filterByUserId(userid ,dataFrame)
  (userid, lr.fit(frame, "topicDistribution", "s"))
}).toDF()

当我使用foreach函数时,我得到这个错误。

 result.foreach(row => {
  val model = row.getAs[LinearRegressionModel](1)
  val userid = row.getString(0)
  model.save(SocialTextTest.userModelPath + userid)
})
Exception in thread "main" java.lang.UnsupportedOperationException: 
No Encoder found for org.apache.spark.ml.regression.LinearRegressionModel
- field (class: "org.apache.spark.ml.regression.LinearRegressionModel", name: "_2")
- root class: "scala.Tuple2"

我应该自己写一个编码器吗?

4

1 回答 1

0

这个问题是有原因的。

未找到 org.apache.spark.ml.regression.LinearRegressionModel 的编码器

一旦您了解了数据集数据抽象的真正含义和编码器的目的,代码就没有多大意义了。

本质上,首先准备您的数据集(作为数据集上的转换集合),并且仅在数据集准备好时才训练模型(也就是拟合模型)。然后,该模型将在 Dataset 范围之外,您将看不到异常。

调用时发生异常的原因foreach是当您触发计算并且 Spark 尝试执行代码时。

我应该自己写一个编码器吗?

不好了。按照机器学习库 (MLlib) 指南中的指南重写代码,并查看一些示例以了解如何使用 API。

于 2017-09-18T07:12:54.810 回答