2016-10-11 2 views
0

У меня есть список кортежей, который выглядит следующим образом:Обработка массива (String, Int) кортежи как словарь

(("String1", Value1), ("String2", Value2), ...) 

Где строка является String и значением является Double. Есть ли способ в scala для выполнения следующих задач:

1) Найдите в списке конкретное строковое значение.

2) Если у нас есть удар, верните значение, связанное со строкой.

3) Если у нас есть промах, верните -1.

Эта последовательность кортежей была создана с использованием collect на RDD формата RDD [K, V], где клавишами были строки, а vals - двойными. Первоначально я планировал использовать поиск на RDD, но, похоже, эта работа должна быть выполнена на драйвере (отсюда collect).

+1

Используйте 'collectAsMap' вместо' collect' http://spark.apache.org/docs/latest/api /scala/index.html#[email protected]():scala.collection.Map[K,V] – Yawar

ответ

1

Может быть, вы можете попытаться преобразовать его в карту первым, то:

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 
+0

Закончено преобразование его в карту, как вы оба предложили. Благодаря! – mongolol

1
val m = list.toMap.withDefaultValue(-1d) 

// 1 and 2 
m("String1") // Value1 

// 3 
m("Some other") // -1d 
Смежные вопросы