【问题标题】:Getting the key of a key/value pair in Scala/Spark在 Scala/Spark 中获取键/值对的键
【发布时间】:2020-09-30 05:32:26
【问题描述】:

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

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

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

【问题讨论】:

  • 只是println(picardsShip._1)_1 获取元组中的第一个元素。
  • @KrzysztofAtłasik 我不是在寻找第一个元素。我正在寻找key 而不是keyvalue。这适用于我想引用的任何元素。谢谢。
  • 这是一个 Scala 元组。没有特定于 Spark
  • @EmiCareOfCell44 你是对的。但我在 Spark 中使用了 Scala 代码。
  • 您可以在 Map 中查找键,而不是在 Tuple2 中。这是一个元素序列。您可以获得一个元素作为其索引。例如:scala> picardsShip.productElement(0) res0: Any = Picard

标签: scala key-value


【解决方案1】:

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

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

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

scala> picardsShip._1
res1: String = Picard

是的,您可以使用 -> 运算符创建一个键/值对,但是如果您希望它像拥有一个键/值对一样对其进行操作 - 您必须通过将其包装更具体一些一张地图。然后你不再有 1 个键/值对,但理论上没有很多键值对,这意味着你基本上有一种 Seq,这是 Scala 真正构建的。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2021-01-23
    • 2015-09-07
    • 2021-12-29
    • 2018-09-25
    • 2017-02-04
    • 1970-01-01
    相关资源
    最近更新 更多