【问题标题】:Map Triples to IDs/numbers using ZipWithIndex/ZipWithUniqueID使用 ZipWithIndex/ZipWithUniqueID 将三元组映射到 ID/数字
【发布时间】:2018-01-30 13:04:15
【问题描述】:

我之前问过这个问题,但不清楚,所以我添加了更多解释以更清楚并获得帮助。 replace strings with ZipWithIndex/ZipWithUniqueID

我正在尝试使用 ZipWithIndex 或 ZipWithUniqueID 将字符串映射到数字

假设我有这种格式

("u1",("name", "John Sam"))
("u2",("age", "twinty Four"))
("u3",("name", "sam Blake"))

我想要这个结果

(0,(3,4))
(1,(5,6))
(2,(3,8))

我尝试将 zipWithIndex 直接用于三元组,但我将每个字母映射到一个数字,我想映射整个字符串而不分割它。 并尝试提取键值对中的第一个元素 所以我做到了

val first = file.map(line=> line._1).distinct()
then apply ZipWithIndex
val z1= first.ZipWithIndex()

我得到了这样的结果

("u1",0)
("u2",1)
("u3",2)

现在我需要获取 ids/numbers 并在我的原始文件中进行更改。我需要将所有不同的 ids/numbers 保留在 hashTable 中,以便以后能够查找它们。 有什么办法吗?有什么建议吗?

希望你有我的问题

【问题讨论】:

标签: scala apache-spark


【解决方案1】:

你的意思是这样的?

val file = List(("u1",("name", "John Sam")),
  ("u2",("age", "twinty Four")),
  ("u3",("name", "sam Blake")))

val first = file.map(line=> line._1) ++
  file.flatMap(line=> List(line._2._1, line._2._2)).distinct


val z1: Map[String,Int] = Map[String,Int](first.zipWithIndex:_*)

file.map{ l =>
  (z1(l._1),
    (z1(l._2._1), z1(l._2._2)))
}

【讨论】:

  • 实现你的答案给我不同的索引到同一实体,例如(名称)映射到两个不同的数字(索引)。有没有办法将它们映射到同一个索引?您是否知道如何获得仅包含索引的结果?例如以这种格式写下答案 (0,(2,3)) ?没有对应的字符串
  • 我不确定你的名字是什么意思得到两个 id,我认为不同的调用保证不会发生这种情况。我更新了答案以映射到结果 id 映射
  • 我在使用 (toMap) 时出错。什么是必需的进口声明?我也收到了这个错误(无法解析符号->)
  • 你使用的是什么版本的 Scala?
  • 我使用的是 Scala 2.11
猜你喜欢
  • 2018-07-05
  • 1970-01-01
  • 2014-02-16
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
相关资源
最近更新 更多