Scala Spark中的分布式映射

blu*_*sky 13 scala apache-spark

Spark支持分布式Map集合类型吗?

因此,如果我有一个HashMap [String,String],它们是键值对,可以将它转换为分布式Map集合类型吗?要访问该元素,我可以使用"过滤器",但我怀疑它的表现和Map一样好吗?

aar*_*man 9

由于我发现了一些新信息,我认为我会将我的评论转化为答案.@maasg已经涵盖了标准lookup函数我想指出你应该小心,因为如果RDD的分区器是None,查找只是使用过滤器.关于spark之上的(K,V)存储,它看起来正在进行中,但是这里已经有了一个可用的pull请求.这是一个示例用法.

import org.apache.spark.rdd.IndexedRDD

// Create an RDD of key-value pairs with Long keys.
val rdd = sc.parallelize((1 to 1000000).map(x => (x.toLong, 0)))
// Construct an IndexedRDD from the pairs, hash-partitioning and indexing
// the entries.
val indexed = IndexedRDD(rdd).cache()

// Perform a point update.
val indexed2 = indexed.put(1234L, 10873).cache()
// Perform a point lookup. Note that the original IndexedRDD remains
// unmodified.
indexed2.get(1234L) // => Some(10873)
indexed.get(1234L) // => Some(0)

// Efficiently join derived IndexedRDD with original.
val indexed3 = indexed.innerJoin(indexed2) { (id, a, b) => b }.filter(_._2 != 0)
indexed3.collect // => Array((1234L, 10873))

// Perform insertions and deletions.
val indexed4 = indexed2.put(-100L, 111).delete(Array(998L, 999L)).cache()
indexed2.get(-100L) // => None
indexed4.get(-100L) // => Some(111)
indexed2.get(999L) // => Some(0)
indexed4.get(999L) // => None
Run Code Online (Sandbox Code Playgroud)

似乎pull请求很受欢迎,可能会包含在未来版本的spark中,因此在您自己的代码中使用该pull请求可能是安全的.这是JIRA票,以防你好奇