Spark 数据集和方差
Spark Datasets and variance
上下文
我创建了一个函数,它采用 Dataset[MyCaseClass]
和 returns 其列之一的元素数组
def columnToArray(ds: Dataset[MyCaseClass], columnName: String): Array[String] = {
ds
.select(columnName)
.rdd
.map(row => row(0).toString)
.collect
}
它适用于 case class
case class MyCaseClass(
fieldA: String,
fieldB: String,
fieldC: String
)
问题
我需要使用其他类型的 Dataset
重用该功能。为了概括,我将 Dataset
的类型声明为 AnyRef
但是当我将它用于上述情况 class 时,我得到以下错误
type mismatch; found : org.apache.spark.sql.Dataset[com.my.package.MyCaseClass] required: org.apache.spark.sql.Dataset[AnyRef] Note: com.my.package.MyCaseClass <: AnyRef, but class Dataset is invariant in type T. You may wish to define T as +T instead. (SLS 4.5)
我想错误中提到的类型 T
是 Dataset
的类型,所以我不能改变它的方差。有没有其他方法可以概括这个函数?
对于这个特定的函数,Dataset
的确切类型并不重要,所以我只是:
def columnToArray(ds: Dataset[_], columnName: String): Array[String] = {
ds
.select(columnName)
.rdd
.map(row => row(0).toString)
.collect
}
上下文
我创建了一个函数,它采用 Dataset[MyCaseClass]
和 returns 其列之一的元素数组
def columnToArray(ds: Dataset[MyCaseClass], columnName: String): Array[String] = {
ds
.select(columnName)
.rdd
.map(row => row(0).toString)
.collect
}
它适用于 case class
case class MyCaseClass(
fieldA: String,
fieldB: String,
fieldC: String
)
问题
我需要使用其他类型的 Dataset
重用该功能。为了概括,我将 Dataset
的类型声明为 AnyRef
但是当我将它用于上述情况 class 时,我得到以下错误
type mismatch; found : org.apache.spark.sql.Dataset[com.my.package.MyCaseClass] required: org.apache.spark.sql.Dataset[AnyRef] Note: com.my.package.MyCaseClass <: AnyRef, but class Dataset is invariant in type T. You may wish to define T as +T instead. (SLS 4.5)
我想错误中提到的类型 T
是 Dataset
的类型,所以我不能改变它的方差。有没有其他方法可以概括这个函数?
对于这个特定的函数,Dataset
的确切类型并不重要,所以我只是:
def columnToArray(ds: Dataset[_], columnName: String): Array[String] = {
ds
.select(columnName)
.rdd
.map(row => row(0).toString)
.collect
}