Mad*_*hu 2 scala apache-spark scala-generics apache-spark-dataset
以下代码在 Spark 中创建一个空数据集。
scala> val strings = spark.emptyDataset[String]
strings: org.apache.spark.sql.Dataset[String] = [value: string]
Run Code Online (Sandbox Code Playgroud)
emptyDataset 的签名是..
@Experimental
@InterfaceStability.Evolving
def emptyDataset[T: Encoder]: Dataset[T] = {
val encoder = implicitly[Encoder[T]]
new Dataset(self, LocalRelation(encoder.schema.toAttributes), encoder)
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的签名没有强制 T 成为 Encoder 的子类型?
它接受字符串类型的 T 并为字符串创建一个编码器并将其传递给数据集构造函数。它最终创建数据集[字符串]。
这种语法实际上是要求隐式Encoder[T]. 以下功能是等效的:
def foo[A : Encoder](a: A)
def foo[A](a: A)(implicit encoder: Encoder[A])
Run Code Online (Sandbox Code Playgroud)
子类型的语法实际上是由类型边界定义的,A <: B例如。我希望这对你有帮助。
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |