我在尝试将我的数据框转换为数据集时遇到问题,因此我可以运行Kmeans聚类算法。我的代码就是上面的
import org.apache.spark.sql.{Dataset, Encoder, Encoders}
case class MyCase(sId: Int, tId:Int, label:Double, sAuthors:String, sYear:Int, sJournal:String,tAuthors:String, tYear:Int,tJournal:String, yearDiff:Int,nCommonAuthors:Int,isSelfCitation:Boolean
,isSameJournal:Boolean,cosSimTFIDF:Double,sInDegrees:Int,sNeighbors:Array[Long],tInDegrees:Int,tNeighbors:Array[Long],inDegreesDiff:Int,commonNeighbors:Int,jaccardCoefficient:Double)
val men = Encoders[MyCase]
val ds: Dataset[MyCase] = transformedTrainingSetDF.as(men)
尝试执行此操作,出现以下错误:
错误:(208,23)对象编码器未使用类型参数。
val men =编码器[MyCase]
答案 0 :(得分:1)
您不需要显式编码器即可将DataFrame(= Row
s的数据集)转换为MyCase
的数据集。因此,用val men = Encoders[MyCase]
解决问题的最简单方法就是删除它。
确实应该如下所示,但根本不需要。
import org.apache.spark.sql.Encoders
Encoders.product[Person]
将其放在一边,修复as
部分。应该使用as
并接受类型而不是对象(目的不同)。
val ds: Dataset[MyCase] = transformedTrainingSetDF.as[Person]
您完成了。
答案 1 :(得分:0)
您应根据Encoders.product
文档将Encoders
方法用于案例类:
Scala产品类型(元组,案例类等)的编码器。
尝试如下更改:
val men = Encoders.product[MyCase]
答案 2 :(得分:0)
好的,我想我找到了收到错误的原因。我应该写
case class MyCase(sId: Int, tId:Int, label:Double, sAuthors:String, sYear:Int,
sJournal:String,tAuthors:String, tYear:Int,tJournal:String,
yearDiff:Int,nCommonAuthors:Int,isSelfCitation:Boolean,
isSameJournal:Boolean,cosSimTFIDF:Double,sInDegrees:Int,sNeighbors:Array[Long],tInDegrees:Int,tNeighbors:Array[Long],inDegreesDiff:Int,commonNeighbors:Int,jaccardCoefficient:Double)
之前
object Test {
def main(args: Array[String]): Unit = {