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)

我想错误中提到的类型 TDataset 的类型,所以我不能改变它的方差。有没有其他方法可以概括这个函数?

对于这个特定的函数,Dataset 的确切类型并不重要,所以我只是:

def columnToArray(ds: Dataset[_], columnName: String): Array[String] = {
 ds
   .select(columnName)
   .rdd
   .map(row => row(0).toString)
   .collect
}