You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mahout.apache.org by "Vishnu (JIRA)" <ji...@apache.org> on 2011/09/07 17:56:10 UTC

[jira] [Created] (MAHOUT-801) MongoDBDataModel getID() throws a class cast exception

MongoDBDataModel  getID() throws a class cast exception
-------------------------------------------------------

                 Key: MAHOUT-801
                 URL: https://issues.apache.org/jira/browse/MAHOUT-801
             Project: Mahout
          Issue Type: Bug
          Components: Integration
    Affects Versions: 0.6
            Reporter: Vishnu


I imported GroupLense ratings.dat to a mongodb collection "ratings" using mongoimport 

Output of db.ratings.find() query

"_id" : ObjectId("4e6733621497ef8543c1e144"), "userId" : 1, "movieId" : 1193, "rating" : 5, "timestamp" : NumberLong(978300760) 
"_id" : ObjectId("4e6733621497ef8543c1e145"), "userId" : 1, "movieId" : 661, "rating" : 3, "timestamp" : NumberLong(978302109) 
"_id" : ObjectId("4e6733621497ef8543c1e146"), "userId" : 1, "movieId" : 914, "rating" : 3, "timestamp" : NumberLong(978301968) 
"_id" : ObjectId("4e6733621497ef8543c1e147"), "userId" : 1, "movieId" : 3408, "rating" : 4, "timestamp" : NumberLong(978300275) 
"_id" : ObjectId("4e6733621497ef8543c1e148"), "userId" : 1, "movieId" : 2355, "rating" : 5, "timestamp" : NumberLong(978824291) 



Spring Bean creating MongoDBDataModel instance

{code}
  <bean id="mongodbDataModel" class="org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel">
        <constructor-arg index="0" type="java.lang.String" value="127.0.0.1"/>
        <constructor-arg index="1" type="int" value="27017"/>
        <constructor-arg index="2" type="java.lang.String" value="grouplens"/>
        <constructor-arg index="3" type="java.lang.String" value="ratings" />
        <constructor-arg index="4" type="boolean" value="false"/>
        <constructor-arg index="5" type="boolean" value="false"/>
        <constructor-arg index="6" type="java.text.DateFormat" value="#{ null }"/>
        <constructor-arg index="7" type="java.lang.String" value="user"/>
        <constructor-arg index="8" type="java.lang.String" value="password"/>
        <constructor-arg index="9" type="java.lang.String" value="userId"/>
        <constructor-arg index="10" type="java.lang.String" value="movieId"/>
        <constructor-arg index="11" type="java.lang.String" value="rating"/>
    </bean>
{code}

When MongDBDataModel loads the rating from mongdb, method getID() throws ClassCastException

{code}
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.getID(MongoDBDataModel.java:742)
	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.buildModel(MongoDBDataModel.java:564)
	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.<init>(MongoDBDataModel.java:347)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

{code}

Exception is being thrown by last return statement "return (String) id;"

{code}
private String getID(Object id, boolean isUser) {
    if (id.getClass().getName().contains("ObjectId")) {
      if (isUser) {
        userIsObject = true;
      } else {
        itemIsObject = true;
      }
      return ((ObjectId) id).toStringMongod();
    } else {
      return (String) id;
    }
  }
{code}



--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (MAHOUT-801) MongoDBDataModel getID() throws a class cast exception

Posted by "Hudson (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/MAHOUT-801?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13102817#comment-13102817 ] 

Hudson commented on MAHOUT-801:
-------------------------------

Integrated in Mahout-Quality #1032 (See [https://builds.apache.org/job/Mahout-Quality/1032/])
    MAHOUT-801 avoid some ClassCastException by preferring toString()

srowen : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1169784
Files : 
* /mahout/trunk/integration/src/main/java/org/apache/mahout/cf/taste/impl/model/mongodb/MongoDBDataModel.java


> MongoDBDataModel  getID() throws a class cast exception
> -------------------------------------------------------
>
>                 Key: MAHOUT-801
>                 URL: https://issues.apache.org/jira/browse/MAHOUT-801
>             Project: Mahout
>          Issue Type: Bug
>          Components: Integration
>    Affects Versions: 0.6
>            Reporter: Vishnu
>            Assignee: Sean Owen
>             Fix For: 0.6
>
>
> I imported GroupLense ratings.dat to a mongodb collection "ratings" using mongoimport 
> Output of db.ratings.find() query
> "_id" : ObjectId("4e6733621497ef8543c1e144"), "userId" : 1, "movieId" : 1193, "rating" : 5, "timestamp" : NumberLong(978300760) 
> "_id" : ObjectId("4e6733621497ef8543c1e145"), "userId" : 1, "movieId" : 661, "rating" : 3, "timestamp" : NumberLong(978302109) 
> "_id" : ObjectId("4e6733621497ef8543c1e146"), "userId" : 1, "movieId" : 914, "rating" : 3, "timestamp" : NumberLong(978301968) 
> "_id" : ObjectId("4e6733621497ef8543c1e147"), "userId" : 1, "movieId" : 3408, "rating" : 4, "timestamp" : NumberLong(978300275) 
> "_id" : ObjectId("4e6733621497ef8543c1e148"), "userId" : 1, "movieId" : 2355, "rating" : 5, "timestamp" : NumberLong(978824291) 
> Spring Bean creating MongoDBDataModel instance
> {code}
>   <bean id="mongodbDataModel" class="org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel">
>         <constructor-arg index="0" type="java.lang.String" value="127.0.0.1"/>
>         <constructor-arg index="1" type="int" value="27017"/>
>         <constructor-arg index="2" type="java.lang.String" value="grouplens"/>
>         <constructor-arg index="3" type="java.lang.String" value="ratings" />
>         <constructor-arg index="4" type="boolean" value="false"/>
>         <constructor-arg index="5" type="boolean" value="false"/>
>         <constructor-arg index="6" type="java.text.DateFormat" value="#{ null }"/>
>         <constructor-arg index="7" type="java.lang.String" value="user"/>
>         <constructor-arg index="8" type="java.lang.String" value="password"/>
>         <constructor-arg index="9" type="java.lang.String" value="userId"/>
>         <constructor-arg index="10" type="java.lang.String" value="movieId"/>
>         <constructor-arg index="11" type="java.lang.String" value="rating"/>
>     </bean>
> {code}
> When MongDBDataModel loads the rating from mongdb, method getID() throws ClassCastException
> {code}
> Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
> 	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.getID(MongoDBDataModel.java:742)
> 	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.buildModel(MongoDBDataModel.java:564)
> 	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.<init>(MongoDBDataModel.java:347)
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> 	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> {code}
> Exception is being thrown by last return statement "return (String) id;"
> {code}
> private String getID(Object id, boolean isUser) {
>     if (id.getClass().getName().contains("ObjectId")) {
>       if (isUser) {
>         userIsObject = true;
>       } else {
>         itemIsObject = true;
>       }
>       return ((ObjectId) id).toStringMongod();
>     } else {
>       return (String) id;
>     }
>   }
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Resolved] (MAHOUT-801) MongoDBDataModel getID() throws a class cast exception

Posted by "Sean Owen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/MAHOUT-801?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Sean Owen resolved MAHOUT-801.
------------------------------

       Resolution: Fixed
    Fix Version/s: 0.6
         Assignee: Sean Owen

I changed all occurrences of a String cast to use toString(), with proper null checking of course.

> MongoDBDataModel  getID() throws a class cast exception
> -------------------------------------------------------
>
>                 Key: MAHOUT-801
>                 URL: https://issues.apache.org/jira/browse/MAHOUT-801
>             Project: Mahout
>          Issue Type: Bug
>          Components: Integration
>    Affects Versions: 0.6
>            Reporter: Vishnu
>            Assignee: Sean Owen
>             Fix For: 0.6
>
>
> I imported GroupLense ratings.dat to a mongodb collection "ratings" using mongoimport 
> Output of db.ratings.find() query
> "_id" : ObjectId("4e6733621497ef8543c1e144"), "userId" : 1, "movieId" : 1193, "rating" : 5, "timestamp" : NumberLong(978300760) 
> "_id" : ObjectId("4e6733621497ef8543c1e145"), "userId" : 1, "movieId" : 661, "rating" : 3, "timestamp" : NumberLong(978302109) 
> "_id" : ObjectId("4e6733621497ef8543c1e146"), "userId" : 1, "movieId" : 914, "rating" : 3, "timestamp" : NumberLong(978301968) 
> "_id" : ObjectId("4e6733621497ef8543c1e147"), "userId" : 1, "movieId" : 3408, "rating" : 4, "timestamp" : NumberLong(978300275) 
> "_id" : ObjectId("4e6733621497ef8543c1e148"), "userId" : 1, "movieId" : 2355, "rating" : 5, "timestamp" : NumberLong(978824291) 
> Spring Bean creating MongoDBDataModel instance
> {code}
>   <bean id="mongodbDataModel" class="org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel">
>         <constructor-arg index="0" type="java.lang.String" value="127.0.0.1"/>
>         <constructor-arg index="1" type="int" value="27017"/>
>         <constructor-arg index="2" type="java.lang.String" value="grouplens"/>
>         <constructor-arg index="3" type="java.lang.String" value="ratings" />
>         <constructor-arg index="4" type="boolean" value="false"/>
>         <constructor-arg index="5" type="boolean" value="false"/>
>         <constructor-arg index="6" type="java.text.DateFormat" value="#{ null }"/>
>         <constructor-arg index="7" type="java.lang.String" value="user"/>
>         <constructor-arg index="8" type="java.lang.String" value="password"/>
>         <constructor-arg index="9" type="java.lang.String" value="userId"/>
>         <constructor-arg index="10" type="java.lang.String" value="movieId"/>
>         <constructor-arg index="11" type="java.lang.String" value="rating"/>
>     </bean>
> {code}
> When MongDBDataModel loads the rating from mongdb, method getID() throws ClassCastException
> {code}
> Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
> 	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.getID(MongoDBDataModel.java:742)
> 	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.buildModel(MongoDBDataModel.java:564)
> 	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.<init>(MongoDBDataModel.java:347)
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> 	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> {code}
> Exception is being thrown by last return statement "return (String) id;"
> {code}
> private String getID(Object id, boolean isUser) {
>     if (id.getClass().getName().contains("ObjectId")) {
>       if (isUser) {
>         userIsObject = true;
>       } else {
>         itemIsObject = true;
>       }
>       return ((ObjectId) id).toStringMongod();
>     } else {
>       return (String) id;
>     }
>   }
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (MAHOUT-801) MongoDBDataModel getID() throws a class cast exception

Posted by "Fernando Tapia Rico (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/MAHOUT-801?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13102669#comment-13102669 ] 

Fernando Tapia Rico commented on MAHOUT-801:
--------------------------------------------

Hi Vishnu,
I think this change should work:
{code:java}
return (String) id;
{code}

{code:java}
return id.toString();
{code}

> MongoDBDataModel  getID() throws a class cast exception
> -------------------------------------------------------
>
>                 Key: MAHOUT-801
>                 URL: https://issues.apache.org/jira/browse/MAHOUT-801
>             Project: Mahout
>          Issue Type: Bug
>          Components: Integration
>    Affects Versions: 0.6
>            Reporter: Vishnu
>
> I imported GroupLense ratings.dat to a mongodb collection "ratings" using mongoimport 
> Output of db.ratings.find() query
> "_id" : ObjectId("4e6733621497ef8543c1e144"), "userId" : 1, "movieId" : 1193, "rating" : 5, "timestamp" : NumberLong(978300760) 
> "_id" : ObjectId("4e6733621497ef8543c1e145"), "userId" : 1, "movieId" : 661, "rating" : 3, "timestamp" : NumberLong(978302109) 
> "_id" : ObjectId("4e6733621497ef8543c1e146"), "userId" : 1, "movieId" : 914, "rating" : 3, "timestamp" : NumberLong(978301968) 
> "_id" : ObjectId("4e6733621497ef8543c1e147"), "userId" : 1, "movieId" : 3408, "rating" : 4, "timestamp" : NumberLong(978300275) 
> "_id" : ObjectId("4e6733621497ef8543c1e148"), "userId" : 1, "movieId" : 2355, "rating" : 5, "timestamp" : NumberLong(978824291) 
> Spring Bean creating MongoDBDataModel instance
> {code}
>   <bean id="mongodbDataModel" class="org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel">
>         <constructor-arg index="0" type="java.lang.String" value="127.0.0.1"/>
>         <constructor-arg index="1" type="int" value="27017"/>
>         <constructor-arg index="2" type="java.lang.String" value="grouplens"/>
>         <constructor-arg index="3" type="java.lang.String" value="ratings" />
>         <constructor-arg index="4" type="boolean" value="false"/>
>         <constructor-arg index="5" type="boolean" value="false"/>
>         <constructor-arg index="6" type="java.text.DateFormat" value="#{ null }"/>
>         <constructor-arg index="7" type="java.lang.String" value="user"/>
>         <constructor-arg index="8" type="java.lang.String" value="password"/>
>         <constructor-arg index="9" type="java.lang.String" value="userId"/>
>         <constructor-arg index="10" type="java.lang.String" value="movieId"/>
>         <constructor-arg index="11" type="java.lang.String" value="rating"/>
>     </bean>
> {code}
> When MongDBDataModel loads the rating from mongdb, method getID() throws ClassCastException
> {code}
> Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
> 	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.getID(MongoDBDataModel.java:742)
> 	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.buildModel(MongoDBDataModel.java:564)
> 	at org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel.<init>(MongoDBDataModel.java:347)
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> 	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> 	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> {code}
> Exception is being thrown by last return statement "return (String) id;"
> {code}
> private String getID(Object id, boolean isUser) {
>     if (id.getClass().getName().contains("ObjectId")) {
>       if (isUser) {
>         userIsObject = true;
>       } else {
>         itemIsObject = true;
>       }
>       return ((ObjectId) id).toStringMongod();
>     } else {
>       return (String) id;
>     }
>   }
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira