Spark数据集和方差

时间:2017-07-31 15:29:45

标签: scala apache-spark apache-spark-dataset

上下文

我创建了一个函数,它接受<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的类型,因此我无法更改其差异。还有其他方法我可以某种方式推广这个功能吗?

1 个答案:

答案 0 :(得分:1)

对于此特定功能,Dataset的确切类型并不重要,所以我只是简单地说:

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