Apache Spark数据集创建中的Scala泛型类型用法

时间:2017-03-14 09:04:39

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

以下代码在Spark中创建一个空数据集。

     @Experimental  
     @InterfaceStability.Evolving
     def emptyDataset[T: Encoder]: Dataset[T] = {
         val encoder = implicitly[Encoder[T]]
         new Dataset(self, LocalRelation(encoder.schema.toAttributes), encoder)   
     }

emptyDataset的签名是..

{{1}}

为什么上述签名不强制T成为编码器的子类型?

它接受类型为String的T并为String创建一个编码器并将其传递给Dataset构造函数。最后创建数据集[String]。

1 个答案:

答案 0 :(得分:3)

这种语法实际上是一个需要隐式Encoder[T]的语法糖。以下功能是等效的:

def foo[A : Encoder](a: A)

def foo[A](a: A)(implicit encoder: Encoder[A])

子类型的语法实际上是由类型边界定义的,例如A <: B。我希望能帮助你。