【问题标题】:efficient way to create a hash map using RDD as input in spark?使用RDD作为spark中的输入创建哈希映射的有效方法?
【发布时间】:2015-10-21 17:25:48
【问题描述】:

我有一个源文件,它被转换为RDD,这个RDD 后来使用toMap 函数转换为hashmap,但该函数使用collect 非常慢。

我的数据集大约有 100 万条记录。

我的代码:

RDD.collect().toMap.values.toSeq

有没有任何有效的方法可以在不使用 collect 的情况下将 RDD 转换为 HashMap

谢谢 斯里

【问题讨论】:

  • 如果你有一个 PairRDD,你可以获得的壁橱是一个 rdd.collectAsMap(),它返回一个 Map[K, V] 给主人。
  • @RohanAletty 我知道。我只是不太确定 OP 想要什么。
  • 你是如何分区的? 100 万条记录并不是很多,如果它们不是单独巨大的话。只需在一个节点上运行所有内容,甚至可能不使用 Spark。
  • 您是否考虑过仅将值映射到 rrd 然后收集它?这可能会稍微快一点

标签: scala apache-spark


【解决方案1】:

好吧,高效是一个相对术语,但如果您不介意改组,那么您的代码的分布式等效项就是这样的:

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 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2012-07-01
    • 2016-12-23
    相关资源
    最近更新 更多