查找与mapPartition与dicts的性能比较

时间:2015-08-25 13:56:02

标签: apache-spark

在Spark中,从性能角度来看,在lookup之后使用partitionBy是否更好,而不是:

sc.parallelize(range(4000000))                                 \
  .mapPartitions( lambda l: [ dict( [ (i,i) for i in l ] ) ] ) \
  .map( lambda d: d.get(33, None) )                            \
  .collect()

我的目标是使用快速查找来模拟分布式散列图。

1 个答案:

答案 0 :(得分:1)

是否使用partitionBy然后使用lookup或为每个分区创建一个HashMap,其中存储所有发生的元素在很大程度上取决于您的数据。根据关键基数和数据分布,前者或后者的解决方案都是有利的。

但是,在一般情况下,我会经常避免使用lookup,因为它是分区大小的线性操作。当您对分区数据调用lookup时,它将完全遍历相应的分区以查找具有匹配键的所有元素。对于此操作,具有更好查找复杂性的数据结构可能是有益的。

如果你真的想要实现分布式哈希映射,那么我猜你应该对数据进行分区,在其上调用distinct,然后将剩余数据插入哈希映射中以便更快地进行查询。