我有一个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个)
答案 0 :(得分:1)
我遇到了同样的问题,不幸的是,根据我找到的不同资源,没有别的方法。
问题是你需要从RDD开始在结果中创建实际列表,如果你看here,答案也说不可能。
你做的应该没问题,如果你想优化一些东西,那么只要你可以去缓存数据。
答案 1 :(得分:0)
AFAIK是不可能的,但你可能有一个概念上的问题。
鉴于您的意见,您可能想要的是使用aggregateByKey()
。无需创建一百个RDD,只需按类键入一个RDD并构建一个聚合您的统计信息的自定义聚合方法。 Spark将按类分发您的实例,以便您可以独立操作它们。如果逻辑根据类而改变,你总是可以使用if / elses,switch,polymorphism等等......