当前位置: 首页 > 知识库问答 >
问题:

在scala中将集合的元素与HashMap的键合并

百里光熙
2023-03-14

我希望有一个简单的方法来解决我有两个RDD

g.vertices
(4,Set(5, 3))
(0,Set(1, 4))
(1,Set(2))
(6,Set())
(3,Set(0))
(5,Set(2))
(2,Set(1))

maps
Map(4 -> Set(5, 3))
Map(0 -> Set(1, 4))
Map(1 -> Set(2))
Map(6 -> Set())
Map(3 -> Set(0))
Map(5 -> Set(2))
Map(2 -> Set(1))

我怎么能做这样的事?

(4,Map(5 -> Set(2), 3 -> Set(0)))
(0,Map(1 -> Set(2), 4 -> Set(5, 3)))
(1,Map(2 -> Set(1)))
(6,Map())
(3,Map(0 -> Set(1, 4)))
(5,Map(2 -> Set(1)))
(2,Map(1 -> Set(2)))

我想将贴图的键与集合的元素结合起来,所以我想更改集合的元素(将它们与贴图的键合并)

我想到

val maps = g.vertices.map { case (id, attr) => HashMap(id -> attr) }

g.mapVertices{case (id, data) => data.map{case vId => maps.
  map { case i if i.keySet.contains(vId) => HashMap(vId -> i.values) } }}

但我有一个错误

org.apache.spark.SparkExc0019:RDD转换和操作只能由驱动程序调用,不能在其他转换内部调用;例如,rdd1.map(x=

共有1个答案

幸鸿轩
2023-03-14

这是一个用于连接的简单用例。在以下代码中,Ag.vertices中的键的类型,KV映射的键和值类型:

def joinByKeys[A, K, V](sets: RDD[(A, Set[K])], maps: RDD[Map[K, V]]): RDD[(A, Map[K, V])] = {
  val flattenSets = sets.flatMap(p => p._2.map(_ -> p._1)) // create a pair for each element of vertice's sets
  val flattenMaps = maps.flatMap(identity)                 // create an RDD with all indexed values in Maps
  flattenMaps.join(flattenSets).map{                       // join them by their key
    case (k, (v, a)) => (a, (k, v))                        // reorder to put the vertexId as id
  }.aggregateByKey(Map.empty[K, V])(_ + _, _ ++ _)         // aggregate the maps

}

 类似资料:
  • 我有一本字典。 我想找到两个元素的组合,其中每个元素必须来自不同的判决键。 例如:就是这样的组合,而不是这样的组合。 我已经试过这个了 但是它给了和两个不同的组合,但是我只想要其中一个。

  • 为了学习,我开发了一个Scala和JSF应用程序。在这个应用程序中,在JSF中呈现之前,我必须将所有Scala集合对象转换为Java cllectios。有没有什么简单的方法可以通过ScalaElResolver这样的东西来实现,如果有,任何人都有ScalaElResolver的示例代码。提前谢谢菲利普

  • 问题内容: 问题 与新HashSet(Collection)等效的Scala)相关,如何将Java集合(例如)转换为Scala集合? 我实际上是在尝试将Java API调用转换为Spring的 (返回a )成Scala不可变。因此,例如: 这似乎有效。欢迎批评! 问题答案: 您的最后一条建议有效,但您也可以避免使用: 请注意,默认情况下,由于提供了此功能。

  • 假设有几个数组: 我需要找出所有可能的元素集合(1,2,3,4,5...)中的每一个在至少两个阵列(A,B,C....)并以下列方式显示它们: 实际输入是包含字符串的文件。可能有数千个文件,每个文件可能包含一百多个密钥字符串。 我尝试了下面的方法:首先,我通过比较所有可能的数组对来生成元素集。然后,我试图通过使用逻辑生成其他集合——元素集合的交集在数组集合的并集中很常见。像这样: 从上面我们可以得

  • 问题内容: 我不了解Python从保持集中应用的顺序。例如: 的顺序是。为什么“ A”在“ C”之前(可能是字母顺序)?为了保留添加顺序,我必须做什么? 问题答案: 您不能有订单集。而且没有办法告诉Python如何订购它。检查此答案以找到替代方法。

  • 问题内容: 我有一个包含一组其他实体的实体。 Entity1包含SetEntityTwos 我想为entityTwos内部的“ id”字段创建搜索条件。 我搜索了,但没有得到任何答案。有人有主意吗? 谢谢,斯里 问题答案: 很容易。就像是: