Scala 如何将DataFrame转换为Dataset[CaseClass]?
我在尝试将数据帧转换为数据集时遇到了一个问题,这样我就可以运行Kmeans集群算法Scala 如何将DataFrame转换为Dataset[CaseClass]?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我在尝试将数据帧转换为数据集时遇到了一个问题,这样我就可以运行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:In
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]
您应该根据
编码器
文档使用编码器。产品
方法用于案例类:
Scala产品类型(元组、case类等)的编码器
尝试按以下方式更改它:
val men = Encoders.product[MyCase]
好的,我想我找到了出错的原因。我应该写信的
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 = {
将数据帧(
Row
s的数据集)转换为MyCase
的数据集不需要显式编码器。因此,使用val men=Encoders[MyCase]
解决问题的最简单方法就是删除它
让我们假设以下案例类
Person
:
case class Person(id: Long, name: String)
应该是这样的,但根本不需要
import org.apache.spark.sql.Encoders
Encoders.product[Person]
将其放在一边,将修复为部分。它应该使用作为
,采用类型而不是对象(它们的用途不同)
您已经完成了。在哪里定义案例类?您是否在spark shell
中输入行,或者这些行是spark应用程序的一部分?您使用的spark版本是什么?这是您的Spark应用程序中唯一的更改还是其他建议的更改(包括我的更改)也需要?在使用.product之后,正如@JacekLaskowski所说,我将代码移到object上面,Person
来自何处?@matanster这只是一个示例案例类。将其添加到答案中。
val ds: Dataset[MyCase] = transformedTrainingSetDF.as[Person]