首页 文章

创建Spark数据集时不支持类型TypeTag [java.sql.Timestamp]的模式

提问于
浏览
1

嗨,我有以下代码尝试从Seq [T]创建DataFrame

case class CaseConvert[T: TypeTag](a: T)

def createDf[T: TypeTag](data: Seq[T]): DataFrame = {
   spark.createDataFrame(data.map(CaseConvert[T])
}

当通过传递类型执行上面的createDf方法时,请说Seq [java.sql.Timestamp],它无法显示以下错误

UnsupportedOperaionException:不支持TypeTag [java.sql.Timestamp]类型的模式 . 我想我必须为CaseConvert类创建编码器,但不知道如何使用Scala的复杂泛型来完成它 . 请指导我是Spark和Scala的新手 .

1 回答

  • 0

    像这样添加 Encoder

    import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
    import org.apache.spark.sql._
    import scala.reflect.runtime.universe._
    
    val spark = SparkSession.builder.getOrCreate()
    import spark.implicits._
    
    case class CaseConvert[T](a: T)
    
    def createDf[T:  TypeTag](data: Seq[T])(implicit e: Encoder[T]): DataFrame = {
       spark.createDataFrame(data.map(CaseConvert(_)))
    }
    
    createDf(Seq(new java.sql.Timestamp(1)))
    //org.apache.spark.sql.DataFrame = [a: timestamp]
    

    在这里就够了 . Products 的隐含解析将完成其余的工作 .

相关问题