我有一个转换为RDD
的源文件,后来使用RDD
函数将此toMap
转换为hashmap,但该函数使用的是非常慢的收集。
我的数据集大约有1M亿条记录。
我的代码:
RDD.collect().toMap.values.toSeq
是否有任何方法可以在不使用收藏的情况下将RDD
转换为HashMap
?
由于 斯里兰卡
答案 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
方法。