使用RDD作为spark输入创建哈希映射的有效方法?

时间:2015-10-21 17:25:49

标签: scala apache-spark

我有一个转换为RDD的源文件,后来使用RDD函数将此toMap转换为hashmap,但该函数使用的是非常慢的收集。

我的数据集大约有1M亿条记录。

我的代码:

RDD.collect().toMap.values.toSeq

是否有任何方法可以在不使用收藏的情况下将RDD转换为HashMap

由于 斯里兰卡

1 个答案:

答案 0 :(得分:0)

嗯,有效率是一个相对术语但是如果你不介意改组,那么你的代码的分布式等价物就是这样的:

import org.apache.spark.rdd.RDD

val pairRDD: RDD[(T, U)] = ??? // Some RDD of Tuple2[T, U]
val mapLikeRDD = pairRDD.reduceByKey((_, v) => v)

如果您想要的只是值,请按照上面的说明进行操作:

mapLikeRDD.values

旁注mapLikeRDD几乎是教科书哈希表。虽然不是特别有效,因为预期的碰撞次数很高,所以我不会滥用lookup方法。