【问题标题】:Spark Datasets and varianceSpark 数据集和方差
【发布时间】:2017-07-31 15:29:45
【问题描述】:

上下文

我创建了一个函数,它接受 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 的类型声明为AnyRef,但是当我将它与上述案例类一起使用时,出现以下错误

类型不匹配;找到:org.apache.spark.sql.Dataset[com.my.package.MyCaseClass] 需要:org.apache.spark.sql.Dataset[AnyRef] 注意:com.my.package.MyCaseClass <: anyref t>

我认为错误中提到的T 类型是Dataset 的类型,所以我无法更改它的方差。有没有其他方法可以概括这个函数?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多