如何使用排除列表过滤掉RDD中的元素(类似于isin)?

时间:2017-07-17 22:09:40

标签: scala apache-spark rdd

我正在尝试使用类似于Dataframe中isin的列表中的元素来过滤arraybuffer。

val booksDF: DataFrame = ...
val Books_Category = List("A","B","C")
val action_books = booksDF.filter($"bk_category_cd" isin (Books_Category: _*))

如何在RDD上使用集合应用相同的过滤器?

1 个答案:

答案 0 :(得分:3)

在RDD中,您可以使用contains方法将列表发送到filter

假设你有dataframe喜欢

+-----+
|books|
+-----+
|A    |
|D    |
|B    |
+-----+

并列为

val Books_Category = List("A","B","C")

您可以在contains中使用rdd作为

val filteredRDD = df.rdd.filter(x=>Books_Category.contains(x(0)))
filteredRDD.foreach(println)

这应该是结果

[A]
[B]

RDD中执行相同的操作也是相同的

假设我们有RDDlistfilter

val rdd = sc.parallelize(Seq("A", "D", "B", "E", "F"))
val list = List("A","B","C")

然后像我们上面那样做

val filteredRDD = rdd.filter(x => list.contains(x))
filteredRDD.foreach(println)

会导致

A
B