There's an issue in the way case classes are handled on the REPL and you
won't be able to use a case class as a key. See:
https://issues.apache.org/jira/browse/SPARK-2620

BTW, case classes already implement equals and hashCode. It's not needed to
implement those again.

Given that you already implement equals and hashCode, try just dropping
"case"  and create a normal class. It might work that way.

-kr, Gerard.

On Fri, Oct 24, 2014 at 11:20 AM, Jaonary Rabarisoa <jaon...@gmail.com>
wrote:

> In the documentation it's said that we need to override the hashCode and
> equals methods. Without overriding it does't work too. I get this error on
> REPL and stand alone application
>
> On Fri, Oct 24, 2014 at 3:29 AM, Prashant Sharma <scrapco...@gmail.com>
> wrote:
>
>> Are you doing this in REPL ? Then there is a bug filed for this, I just
>> can't recall the bug ID at the moment.
>>
>> Prashant Sharma
>>
>>
>>
>> On Fri, Oct 24, 2014 at 4:07 AM, Niklas Wilcke <
>> 1wil...@informatik.uni-hamburg.de> wrote:
>>
>>>  Hi Jao,
>>>
>>> I don't really know why this doesn't work but I have two hints.
>>> You don't need to override hashCode and equals. The modifier case is
>>> doing that for you. Writing
>>>
>>> case class PersonID(id: String)
>>>
>>> would be enough to get the class you want I think.
>>> If I change the type of the id param to Int it works for me but I don't
>>> know why.
>>>
>>> case class PersonID(id: Int)
>>>
>>> Looks like a strange behavior to me. Have a try.
>>>
>>> Good luck,
>>> Niklas
>>>
>>>
>>> On 23.10.2014 21:52, Jaonary Rabarisoa wrote:
>>>
>>>  Hi all,
>>>
>>>  I have the following case class that I want to use as a key in a
>>> key-value rdd. I defined the equals and hashCode methode but it's not
>>> working. What I'm doing wrong ?
>>>
>>>  *case class PersonID(id: String) {*
>>>
>>> *     override def hashCode = id.hashCode*
>>>
>>> *     override def equals(other: Any) = other match {*
>>>
>>> *         case that: PersonID => this.id <http://this.id> == that.id
>>> <http://that.id> && this.getClass == that.getClass*
>>> *         case _ => false*
>>> *     }   *
>>> * }   *
>>>
>>>
>>> * val p = sc.parallelize((1 until 10).map(x => (PersonID("1"),x )))*
>>>
>>>
>>>  *p.groupByKey.collect foreach println*
>>>
>>>  *(PersonID(1),CompactBuffer(5))*
>>> *(PersonID(1),CompactBuffer(6))*
>>> *(PersonID(1),CompactBuffer(7))*
>>> *(PersonID(1),CompactBuffer(8, 9))*
>>> *(PersonID(1),CompactBuffer(1))*
>>> *(PersonID(1),CompactBuffer(2))*
>>> *(PersonID(1),CompactBuffer(3))*
>>> *(PersonID(1),CompactBuffer(4))*
>>>
>>>
>>>  Best,
>>>
>>>  Jao
>>>
>>>
>>>
>>
>

Reply via email to