上下文
我创建了一个函数,它接受<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
并返回其列之一的元素数组
Dataset[MyCaseClass]
它适用于案例类
def columnToArray(ds: Dataset[MyCaseClass], columnName: String): Array[String] = {
ds
.select(columnName)
.rdd
.map(row => row(0).toString)
.collect
}
问题
我需要使用其他类型的case class MyCaseClass(
fieldA: String,
fieldB: String,
fieldC: String
)
重用该功能。为了概括,我将Dataset
的类型声明为Dataset
,但当我将其与上述案例类一起使用时,我收到以下错误
类型不匹配;发现:org.apache.spark.sql.Dataset [com.my.package.MyCaseClass]必需:org.apache.spark.sql.Dataset [AnyRef]注意:com.my.package.MyCaseClass&lt ;: AnyRef,但是类数据集在类型T中是不变的。您可能希望将T定义为+ T。 (SLS 4.5)
我认为错误中提到的AnyRef
类型是T
的类型,因此我无法更改其差异。还有其他方法我可以某种方式推广这个功能吗?
答案 0 :(得分:1)
对于此特定功能,Dataset
的确切类型并不重要,所以我只是简单地说:
def columnToArray(ds: Dataset[_], columnName: String): Array[String] = {
ds
.select(columnName)
.rdd
.map(row => row(0).toString)
.collect
}