создать кортеж с 4 элементами, используя кортеж с 3 элементами и дополнительным объектом - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть кортеж типа (Array[Short], Array[Short], Array[Short]). Теперь я хочу, чтобы кортеж с элементами должен был выглядеть примерно так: (Array[Short], Array[Short], Array[Short]) + Obj

В основном я создаю карту, чтобы проверить кортеж с 3 элементами, если он найден, то создайте новый кортеж с этими 3 элементами и четвертым также.

val obj1: collection.mutable.HashMap[String, (Array[Short], Array[Short], Array[Short])] = HashMap.empty
val combJoinedMap: collection.mutable.HashMap[String, (Array[Short], Array[Short], Array[Short], Object)] = HashMap.empty

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

Независимо от типа reducedCreditStage3ARddMapped. Вы получаете Option[Array[Short]] здесь, потому что .get из Map возвращает необязательно, а затем вы комбинируете Option[Array[Short]] с некоторым типом, который здесь имеет запах кода.

, не зная типа crdStgRdd._2 Я могу сказать, что вы можете сделать что-то вроде этого:

val t: Array[Short] = combMap.getOrElse(crdStgRdd._1), Array.empty[Short]), 
val XXX = Array.empty[Short]
combJoinedMap.put(crdStgRdd._1,  (t, crdStgRdd._2, XXX))

вам нужно заменить XXX третий элемент кортежа чем-то значимым, или у вас должна быть такая структура в вас reducedCreditStage3ARddMapped.

val reducedCreditStage3ARddMapped: HashMap[String, (Array[Short], Array[Short])]

ПРИМЕЧАНИЕ: пожалуйста, уточните c с вашими типами и не забывайте об ошибках, иначе люди должны просто догадаться и не смогут помочь.

0 голосов
/ 09 апреля 2020

Я пытаюсь добавить карту на основе кодификации, если ключ присутствует на 1-й карте. вот что я пытаюсь сделать:

val combMap: collection.mutable.HashMap [String, (Array [Short], Array [Short], Array [Short])] = HashMap.empty val combJoinedMap: collection .mutable.HashMap [String, (Array [Short], Array [Short], Array [Short], Object)] = HashMap.empty

  combinationRdd.foreach(combRdd =>{
    combMap.put(combRdd._1, (combRdd._2._1, combRdd._2._2, combRdd._2._3))
  })

  reducedCreditStage3ARddMapped.foreach(crdStgRdd =>{
    if(combMap.contains(crdStgRdd._1))
        combJoinedMap.put(crdStgRdd._1, ((combMap.get(crdStgRdd._1)) + crdStgRdd._2))
  })

, но combJoinedMap.put (crdStgRdd._1, (( combMap.get (crdStgRdd._1)) + crdStgRdd._2)) выдавая ошибку

0 голосов
/ 09 апреля 2020

Вы можете использовать collect для фильтрации и изменения каждого элемента в одном go следующим образом:

  val map: Map[String, (Array[Short], Array[Short], Array[Short])] = Map.empty 
  val combJoinedMap = map.collect {
    case (key, (array1, array2, array3)) if true /*check whatever condition you need*/ =>
      key -> (array1, array2, array3, new Object)
  }

Частичная функция case (key, (array1, array2, array3)) ... деконструирует ключ и значение, как кортеж из 3 элементов, в каждый отдельный компонент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...