2014-11-13 3 views
-1

У меня есть HashMap:Scala Спарк получить элемент из HashMap

enter image description here

А также есть массив: enter image description here

я взять элемент из этого массива:

enter image description here

И хотите проверить, присутствует ли оно на карте:

enter image description here

Однако я ошибаюсь. Зачем?

+0

'DenseVector' - класс для случая? –

+0

'DenseVector' из пакета Spark' breeze.linalg'. – Bob

+0

@Sergey Lagutin Мой код: https: //github.com/timasjov/spark-clustering/blob/master/src/ee/ut/cs/DBSCAN.scala Так что не стесняйтесь протестировать его. – Bob

ответ

2

breeze.linalg.DenseVector является «класс», так что это сравнивается например, равенство:

class C(i: Int) 
new C(1) == new C(1) yields false 

если вы видите какой-то код сравнивает два экземпляра в Скале, они работают на «тематические классы», потому что у них есть специальный метод equals/hashCode (или они реализуют свой собственный equals/hashCode при работе над «нормальными классами»).

case class CC(i: Int) 
new CC(1) == new CC(1) yields true 

я думаю, вы должны использовать

<DenseVector instance>.values.deep == <DenseVecotor instance>.values.deep 
  • DenseVector.values, чтобы получить базовые значения (массив)
  • Array.deep сравнить массив.

    Array (1, 2, 3) == Array (1, 2, 3) дает ложные

    Array (1, 2, 3) .deep == Array (1, 2, 3) .deep дает истинные

Пример для находить значения в карте [Array [Int], String]:

val m = Map(Array(1, 2) -> "one", Array(1, 2) -> "two") 

m.find(_._1 == Array(1, 2)) yields None 
m.find(_._1.deep == Array(1, 2).deep) yields Some(...) 

предупреждение: 'найти' на карте рассматривать карту в виде последовательного сбора кортежей и проверяет каждый элемент до тех пор, пока не найдет совпадение, вернув «Нет», есть n совпадение. Это будет в основном то же самое, что иметь список (комментарий от @maasg)

+0

Но у HashMap doen нет метода 'map.keys.deep'. Как я могу сравнить это? – Bob

+0

@bob У меня есть пример, чтобы найти значения на карте –

+1

Предупреждение: «найти» на карте рассматривать карту как последовательный набор кортежей и проверять каждый элемент до тех пор, пока он не найдет совпадение, возвращая «Нет», нет совпадение.Это будет в основном то же самое, что и список. – maasg

Смежные вопросы