Обработка массива кортежей (String, Int) как словаря

#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