Apache spark Spark aggregateByKey:使用钥匙
我想从我的RDD创建一组bloom过滤器。我这样做的方式如下所示:Apache spark Spark aggregateByKey:使用钥匙,apache-spark,Apache Spark,我想从我的RDD创建一组bloom过滤器。我这样做的方式如下所示: rdd.aggregateByKey(create(size))(add, combine).collect() 其中,rdd类似于rdd[(Int,Long)] 问题是这些值在每个组中分布不均匀。也就是说,“一个sizefits all”在这里不起作用,我想根据每个键的元素数量,对bloom过滤器进行不同的初始化 所以我想要像这样的东西 rdd.aggregateByKey(key => create(count(ke
rdd.aggregateByKey(create(size))(add, combine).collect()
其中,rdd
类似于rdd[(Int,Long)]
问题是这些值在每个组中分布不均匀。也就是说,“一个size
fits all”在这里不起作用,我想根据每个键的元素数量,对bloom过滤器进行不同的初始化
所以我想要像这样的东西
rdd.aggregateByKey(key => create(count(key))(add, combine).collect()
其中count
是带有计数的映射
这是我可以用groupByKey做的,但我想知道,还有其他方法吗?有一个简单的技巧可以使用。将
RDD
从(键,值)
转换为(键,(键,值))
:
并应用组合键:
def createCombiner(v: (Int, Long)) = create(count(_._1)) // And insert _._2
kkvRdd.combineByKey(createCombiner, add, combine)
其中,add
和combine
被调整为接受新类型
def createCombiner(v: (Int, Long)) = create(count(_._1)) // And insert _._2
kkvRdd.combineByKey(createCombiner, add, combine)