拆分RDD以获取子类型的RDD

时间:2016-06-15 21:27:09

标签: scala apache-spark

我希望能够将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调度到正确的子类型方法。)

有没有人有更高效/更清洁的解决方案?

0 个答案:

没有答案