首页 > 解决方案 > 在 Scala/Spark 中获取键/值对的键

问题描述

我使用 Scala/Spark 中的箭头运算符创建了一个键值对:

val picardsShip = "Picard" -> "Enterprise-D"

正如预期的那样,我通过 using 提取了 valueprintln(picardsShip._2)并返回了 value 。Enterprise-D但是,我想在这种情况下提取密钥以获取Picard. 当我picardsShip.在我正在使用的 IntelliJ IDEA 编辑器中输入内容时,我没有看到任何暗示获取密钥的明显属性或方法的内容。有任何想法吗?谢谢你。

标签: scalakey-value

解决方案


请注意,您还没有创建键/值对。你已经创建了一个元组。当你使用 REPL 时,你可以看到发生了什么:

scala> val picardsShip = "Picard" -> "Enterprise-D"
picardsShip: (String, String) = (Picard,Enterprise-D)

要访问第一个值,请使用@Krzysztof Atłasik 建议的内容并使用._1

scala> picardsShip._1
res1: String = Picard

是的,您可以使用运算符创建键/值对->,但如果您希望它像拥有键/值对一样对其进行操作 - 您必须通过将其包装在地图中来更加具体。然后你不再有 1 个键/值对,但理论上没有多个键值对,这意味着你基本上拥有SeqScala 真正构建的一种。这Map使您可以访问一个 API,该 API 基本上说“好的,这里有一系列可以被视为键值对的项目”,并允许您按照您期望的键值对查看的方式对其进行操作:

scala> val shipMap: Map[String, String] = Map(("Picard" -> "Enterprise-D"))
shipMap: Map[String,String] = Map(Picard -> Enterprise-D)

scala> shipMap("Picard")
res2: String = Enterprise-D

scala> shipMap.keys.head
res3: String = Picard

scala> shipMap.foreach( kv => println(kv._1))
Picard

推荐阅读