【问题标题】:How can I create key-value pairs?如何创建键值对?
【发布时间】:2016-01-25 17:57:33
【问题描述】:

我在我的键值对上使用了groupByKey。现在我有了这个(键,Iterable)。 我想从中制作这些键值对: ((key,(列表的一个元素)),1) 用于所有列表 v。

我该怎么做?如何在可迭代列表上循环?

val lines = sc.textFile("followers.txt").map(s => {
  val substrings = s.split(" ")
  (substrings(0), substrings(1))
})
val aggrigateNeighbors = lines.groupByKey().collect().foreach(println)
val friends = aggrigateNeighbors.flatMap{x=>((k,v.hasNext()),1)}

【问题讨论】:

  • 请发布您到目前为止尝试过的内容。
  • 编辑您的问题以包含您的代码。还要说明该代码以何种方式无法执行您想要的操作。
  • 我做到了。我不知道如何访问由 goroupByKey 操作生成的可迭代列表。
  • v.hasNext 返回一个布尔值而不是下一个元素。此外,aggigateNeighbours 不再是 RDD(因为您调用了 collect)。假设您有大量数据,它不适合。
  • 那么如何访问可迭代列表?

标签: scala apache-spark


【解决方案1】:

你快到了。

您需要映射迭代器并从每个迭代器中创建所需的条目

未经测试,抱歉,我不在可以测试它的电脑前。

val lines = sc.textFile("followers.txt").map(s => {
  val substrings = s.split(" ")
  (substrings(0), substrings(1))
})
val aggregateNeighbors = lines.groupByKey()
val friends = aggregateNeighbors.flatMap{case (k,v) => v.map{s=>((k,s), 1)}}

【讨论】:

  • 我有一些错误:值映射不是任何成员!还有这个:没有找到值 aggrigetneighbors
  • 注意我更正了aggrigetneighbors 的拼写。看起来你没有完全按照我发布的那样使用代码?
  • 我仍然无法测试它,但我刚刚检查它编译正常,所以我认为你复制和粘贴错误。
  • 是的,你说得对,我写了 s => ((k,s),1) 你告诉我的
  • 如果和这个无关的话,作为另一个问题发布,其他人也更有可能看到它。
猜你喜欢
  • 2017-07-21
  • 1970-01-01
  • 2013-12-02
  • 2013-01-18
  • 1970-01-01
  • 2017-09-22
  • 2021-05-27
相关资源
最近更新 更多