将列表的索引保存为分布式集合 - Spark

时间:2016-05-26 10:36:03

标签: scala apache-spark rdd

我有一个RDD [(Int,List [Int])],它在每个分区中都有一个唯一的整数键。假设数据被分区为

分区1 - > (1,List1),(2,List2)

分区2 - > (1,List3),(2,List4)

所以,当我想查找索引1的值时,我希望有

分区1 - > (列表1)

分区2 - > (项目list3)

但是返回类型应该是RDD [List(Int)]而不是Array [List(Int)],这意味着我仍然希望集群上的分布式集合没有收集到驱动程序。

目前我正在使用过滤器(案例{(k,v)=> k == key})。map(_._ 2)但我知道这不会进行查找而是按顺序搜索。

我知道有查找方法,但它返回而数组不是RDD。 IndexedRDD也是如此。

那么有没有办法在Spark中做到这一点?

1 个答案:

答案 0 :(得分:0)

我认为你可以使用mapPartitionsWithIndex。您可以从rdd的分区程序中获取感兴趣的分区,并且在(Int,Iterator)=>Iterator函数中,如果它不是感兴趣的分区,您将返回一个空的迭代器。为简单起见,我可能会在正确的分区中返回传入的迭代器,然后再使用RDD.filter来简化代码。

在这里操作的迭代器大概是懒惰的,所以你的函数实际上只应用于分区号,而不是从迭代器中获取结果。