如何根据ID的外部Array()过滤RDD行

时间:2015-02-27 16:35:23

标签: apache-spark

我正在尝试执行以下代码行,但是在更大的RDD中。显然,当a非常大时,我会收到堆大小错误。我怎样才能做到这一点? p通常很小。

val p = Array("id1", "id3", "id2");
val a = sc.parallelize(Array(("id1", ("1", "1")), ("id4", ("4", "4")), ("id2", ("2", "2"))));
val f = a.filter(x=> p contains x._1);
println(f.collect().mkString(";"));

1 个答案:

答案 0 :(得分:1)

这里的问题不是过滤器或小数组,而是尝试collect一个大RDD,它会有效地将所有数据发送给驱动程序,可能会耗尽驱动程序的可用内存。

之后字符串会发生什么?可能需要的是另一种存储过滤器计算结果的方法。

另一个注意事项:如果小数据集的主要用例是contains,请考虑使用Set而不是Array,因为contains在集合和O上分摊O(1) (n)在阵列上。