【发布时间】:2018-02-23 21:35:34
【问题描述】:
我正在尝试创建通用 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]
}
但我收到“无法找到存储在数据集中的类型的编码器”错误。 有没有可能做这样的事情?
第二个周期:
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]
}
以类型不匹配结尾(找到 Encoder[Nothing] ,需要 Encoder[T])。
我试图仅导入 newProductEncoder,但结果相同。
【问题讨论】:
标签: scala apache-spark apache-spark-sql apache-spark-dataset