首页 > 解决方案 > 使用列值列表收集多个 RDD - Spark

问题描述

我有一个 RDD 和一个值列表。如何根据值列表过滤它们并将它们收集为单独的 RDD?

例如:

val rdd = sc.parallelize(Seq((4, "blah", 2), (2, "", 3), (56, "foo", 3), (100, null, 5)))

如何传递值列表以收集列表中所有过滤的 RDD?例如,对于列表:

val l = List(2,3)

干杯!

标签: scalaapache-sparkapache-spark-sql

解决方案


在大多数情况下,使用单个数据框而不是数据框列表更容易。要使用值列表过滤数据框,请使用isinGaurang Shah 的答案。

但是,如果您真的想要一个可能的数据框列表。只需map在列表中过滤每个步骤中的数据框,如下所示:

val dfs = l.map(x => df.filter($"C" === x))

dfs这里将List[DataFrame]如愿以偿。


对于 RDD:

如果您使用 a RDD,唯一需要更改的是过滤器操作:

val rdds = l.map(x => rdd.filter(c => c._3 === x))

rdds将是一个List[RDD].


推荐阅读