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

Scala 使用RDD作为spark中的输入创建哈希映射的有效方法?,scala,apache-spark,Scala,Apache Spark,我有一个转换为RDD的源文件,这个RDD稍后使用toMap函数转换为hashmap,但该函数使用collect,速度非常慢 我的数据集大约有一百万条记录 我的代码: RDD.collect().toMap.values.toSeq 有没有有效的方法可以在不使用collect的情况下将RDD转换为HashMap 谢谢 Sri效率是一个相对的术语,但如果您不介意洗牌,那么代码的分布式等价物就是这样的: import org.apache.spark.rdd.RDD val pairRDD: RD

我有一个转换为
RDD
的源文件,这个
RDD
稍后使用
toMap
函数转换为hashmap,但该函数使用collect,速度非常慢

我的数据集大约有一百万条记录

我的代码:

RDD.collect().toMap.values.toSeq
有没有有效的方法可以在不使用collect的情况下将
RDD
转换为
HashMap

谢谢
Sri

效率是一个相对的术语,但如果您不介意洗牌,那么代码的分布式等价物就是这样的:

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
几乎是一个教科书式的哈希表。不过效率不是特别高,因为预期的冲突数很高,所以我不会滥用
查找
方法。

效率是一个相对的术语,但如果您不介意洗牌,那么代码的分布式等价物就是这样的:

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
几乎是一个教科书式的哈希表。不过效率不是特别高,因为预期的冲突次数很高,所以我不会滥用
查找
方法。

如果您有pairdd,您可以得到的壁橱是一个rdd.collectAsMap(),它将一个映射[K,V]返回给主控器。@eliasah,所以没有什么区别:-/@RohanAletty,我知道。我只是不太确定OP想要什么。你怎么样?100万张唱片并不多,如果它们不是单个巨大的话。只需在一个节点上运行所有内容,甚至可能不使用Spark。您是否考虑过将值映射到rrd,然后收集它?这可能会稍微快一点。如果你有一个pairdd,你可以得到一个rdd。collectAsMap()来返回一个映射[K,V]给主人。@eliasah所以没有什么区别:-/@RohanAletty我知道。我只是不太确定OP想要什么。你怎么样?100万张唱片并不多,如果它们不是单个巨大的话。只需在一个节点上运行所有内容,甚至可能不使用Spark。您是否考虑过将值映射到rrd,然后收集它?这可能会稍微快一点