如何在火花中将单个RDD划分为多个RDD



我有一个RDD,其中每个条目都属于一个类。我想将单个RDD分成几个RDD,这样类的所有条目都进入一个RDD。假设我在输入RDD中有100个这样的类,我希望每个class都进入自己的RDD。我可以使用每个类的过滤器来执行此操作(如下所示),但它会启动多个作业。有没有更好的方法可以在单个工作中做到这一点?

def method(val input:RDD[LabeledPoint], val classes:List[Double]):List[RDD] = 
      classes.map{lbl=>input.filter(_.label==lbl)}

它类似于另一个问题,但我有超过 2 节课(大约 10 节)

我遇到了同样的问题,不幸的是,根据我找到的不同资源,没有其他方法。

问题是你需要从RDD在你的结果中创建实际的列表,如果你看这里,答案也说这是不可能的。

你做什么应该没问题,如果你想优化东西,那么如果可以的话,就去缓存数据。

AFAIK 这是不可能的,但你可能有一个概念问题。

鉴于您的评论,您可能想要的是使用 aggregateByKey() .无需创建一百个RDD,只需按类键入一个RDD,并构建一个自定义聚合方法来聚合您的统计信息。Spark 将按类分布您的实例,以便您可以独立操作它们。如果逻辑根据类而变化,您可以随时使用 if/else、开关、多态等......

最新更新