我希望能够将RDD[T]
拆分为T
的子类型的RDD。什么是最好(最有效)的方式去做?为简单起见(在我的情况下可能),假设T
本身不是通用的。
我一直在使用的解决方案是
implicit class RichRDD[U : ClassTag](rdd: RDD[U]) extends Serializable {
def filterType[T <: U : ClassTag]: RDD[T] = rdd flatMap { case t: T => Some(t); case _ => None }
}
然后我坚持使用初始RDD并为我感兴趣的所有子类型调用filterType
。
在我看来,rdd.filter { classTag[T].runtimeClass.isInstance }.asInstanceOf[RDD[T]]
应该是filterType
更有效的身体,但是当我使用它时,我遇到了一些非常特殊的问题(抛出异常,这表明过滤后的RDD没有&# 39; t包含预期的子类型 - 但是将toString
调度到正确的子类型方法。)
有没有人有更高效/更清洁的解决方案?