我正在尝试执行以下代码行,但是在更大的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(";"));
答案 0 :(得分:1)
这里的问题不是过滤器或小数组,而是尝试collect
一个大RDD,它会有效地将所有数据发送给驱动程序,可能会耗尽驱动程序的可用内存。
之后字符串会发生什么?可能需要的是另一种存储过滤器计算结果的方法。
另一个注意事项:如果小数据集的主要用例是contains
,请考虑使用Set而不是Array
,因为contains
在集合和O上分摊O(1) (n)在阵列上。