【发布时间】:2015-04-16 11:42:43
【问题描述】:
我有一个 RDD,其中每个条目都属于一个类。我想将单个 RDD 分成几个 RDD,这样一个类的所有条目都会进入一个 RDD。假设我在输入 RDD 中有 100 个这样的类,我希望每个类都成为自己的 RDD。我可以使用每个类的过滤器来做到这一点(如下所示),但它会启动几个工作。有没有更好的方法在一项工作中做到这一点?
def method(val input:RDD[LabeledPoint], val classes:List[Double]):List[RDD] =
classes.map{lbl=>input.filter(_.label==lbl)}
它类似于另一个问题,但我有超过 2 个课程(大约 10 个)
【问题讨论】:
-
"我希望每个类都成为自己的 RDD。"为什么?之后你将如何处理它们?
-
嗯...创建 Spark RDD 模型时并未考虑到此类操作。但是,如果你想要这样的东西......你总是可以使用最明显的方法(就像你一样)。现在......关于能够在“单一工作”中做到这一点(单个RDD上的大多数操作确实涉及多个工作,所以我不确定你所说的“单一工作”是什么意思,但假设你的意思是O( n) 不依赖于类数量的操作)...根据当前 RDD 的哲学,我认为它“不应该”是可能的。
-
@Paul 另一种方法(StatisticsSummary)需要一个 RDD 作为输入。我想获取每个班级的汇总统计数据
-
我不认为这真的是一个骗局,因为你想分成两个以上的 RDD。我赞成 b/c 我真的很喜欢你的解决方案!
标签: scala apache-spark