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

时间:2015-04-16 11:42:43

标签: scala apache-spark

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

你做的应该没问题,如果你想优化一些东西,那么只要你可以去缓存数据。

答案 1 :(得分:0)

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

鉴于您的意见,您可能想要的是使用aggregateByKey()。无需创建一百个RDD,只需按类键入一个RDD并构建一个聚合您的统计信息的自定义聚合方法。 Spark将按类分发您的实例,以便您可以独立操作它们。如果逻辑根据类而改变,你总是可以使用if / elses,switch,polymorphism等等......