#scala #apache-spark
#scala #apache-spark
Вопрос:
У меня есть список кортежей, который выглядит следующим образом:
(("String1", Value1), ("String2", Value2), ...)
Где строка — это a String
, а значение — a Double
. Есть ли в scala метод для выполнения следующего:
1) Выполните поиск в списке определенного строкового значения.
2) Если у нас есть совпадение, верните значение, связанное со строкой.
3) Если у нас есть промах, верните -1.
Эта последовательность кортежей была создана с использованием collect
RDD формата RDD [K, V], где ключи были строками, а значения val были двойными. Первоначально я планировал использовать поиск в RDD, но, похоже, эту работу необходимо выполнить в драйвере (отсюда collect
и).
Комментарии:
1.Используйте
collectAsMap
вместоcollect
spark.apache.org/docs/latest/api/scala /…
Ответ №1:
Может быть, вы можете сначала попытаться преобразовать его в map, а затем:
scala> val collection = Map(("hello", 1), ("world", 2))
collection: scala.collection.immutable.Map[String,Int] = Map(hello -> 1, world -> 2)
scala> collection getOrElse ("hello", -1)
res3: Int = 1
scala> collection getOrElse ("scala", -1)
res4: Int = -1
Комментарии:
1. В итоге я преобразовал его в map, как вы оба предложили. Спасибо!
Ответ №2:
val m = list.toMap.withDefaultValue(-1d)
// 1 and 2
m("String1") // Value1
// 3
m("Some other") // -1d