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

How to partition a single RDD into multiple RDD in spark

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

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

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

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

问题是您需要从 RDD 转到结果中创建实际列表,如果您查看 here,答案也说这是不可能的。

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

据我所知,这是不可能的,但您可能有概念上的问题。

根据您的评论,您可能想要使用 aggregateByKey()。无需创建一百个 RDD,只需一个由 class 键控并构建一个自定义聚合方法来聚合您的统计信息。 Spark 将按 class 分布您的实例,以便您可以独立操作它们。如果逻辑根据 class 发生变化,您始终可以使用 if/elses、开关、多态性等...