态
我希望能够做这样的事情
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实际发生了什么,这使与其他库(即腌制)互动更为复杂。