小编Ode*_*erg的帖子

Spark SQL-通用数据集读取器

我试图创建通用的DataSet [T]阅读器,以避免每个阅读器调用都使用dataframe.as [..]。对原始类型和案例类的支持,所以我在想类似的东西:

def read[T <: Product](sql : String): Dataset[T] = {
  import sparkSession.implicits._
  val sqlContext = sparkSession.sqlContext
  val df: DataFrame = sqlContext.read.option("query", sql).load()
  df.as[T]
}
Run Code Online (Sandbox Code Playgroud)

但是我收到“无法为数据集中存储的类型找到编码器”错误。可以做这样的事情吗?

第二周期:

def read[T <: Product](sql : String) : Dataset[T] = {
  import sparkSession.implicits._
  innerRead(sql)
}

private def innerRead[T <: Product : Encoder](sql : String): Dataset[T] = {
  val sqlContext = sparkSession.sqlContext
  val df: DataFrame = sqlContext.read.option("query", sql).load()
  df.as[T]
}  
Run Code Online (Sandbox Code Playgroud)

以类型不匹配结尾(foudn Encoder [Nothing],必需的Encoder [T])。

我试图仅导入newProductEncoder,但结果相同。

scala apache-spark apache-spark-sql apache-spark-dataset

1
推荐指数
1
解决办法
487
查看次数