为什么Spark RDD在T中不变



我希望能够做这样的事情

abstract class Super()
class Type1() extends Super
class Type2() extends Super
val rdd1 = sc.parallelize(Seq(new Type1()))
val rdd2= sc.parallelize(Seq(new Type2()))
val union = rdd1.union(rdd2)

如果RDD在T Union上是协变的,则是RDD [SUPER],但这甚至不是编译。RDD在t中有什么不变的理由吗?


因为堆栈溢出不喜欢仅链接到答案,所以这是它的要点。

  • 尽管RDD向用户暴露了一个不可变的接口,但内部状态有很多可变性,这需要在整个地方洒落。
  • Map(密钥中不变)和Array(不变)的互动会更加尴尬(几乎肯定不会向后兼容)
  • 协方差意味着火花直到Runtime直到RDD实际发生了什么,这使与其他库(即腌制)互动更为复杂。

相关内容

  • 没有找到相关文章

最新更新