NoSQL Zone is brought to you in partnership with:

Distributed Systems Developer, Architect focused on Hadoop, Cassandra, Kafka, MySQL using Scala, C++ and Python. Joe is a DZone MVB and is not an employee of DZone and has posted 28 posts at DZone. You can read more from them at their website. View Full User Profile

How to Use Cassandra with Scala

11.22.2013
| 7073 views |
  • submit to reddit

I have started a new open source project - https://github.com/stealthly/scala-cassandra - that is a Scala wrapper for CQL, specifically a wrapper of the DataStax java-driver.

Test cases are a good entry point, so let's start here: https://github.com/stealthly/scala-cassandra/blob/master/src/test/scala/ScalaCassandraSpec.scala

class ScalaCassandraSpec extends Specification {
 
    CQL.init()
    CQL.startup("MetaStore")
    Meta.createTable()
 
    "Meta objects" should {
      "be able to store & retrieve their binary state" in {
 
      //we use a Thrift object here for portability of the data stored
      val tMeta = new TMeta()
 
      //setting up some randomness so we can confirm what we are writing is what we get back
      val metaUUID = UUID.randomUUID()
      val dataum = Random.alphanumeric.take(1000000).mkString
 
      tMeta.setId(metaUUID.toString)
      tMeta.setDatum(dataum)
 
      Meta.save(tMeta) //Saved to C*
 
      val someNewTMeta = Meta(metaUUID)
      someNewTMeta.getId() must_== metaUUID.toString
 
      someNewTMeta.getDatum() must_== dataum
      }
    }
}

The Meta class (contained in the https://github.com/stealthly/scala-cassandra/blob/master/src/main/scala/MetaDAO.scala file) is like a widget… what's a widget? For us, let's think of it like “sample code”.

When you want to add something different than a widget, create a new thrift file in the `thrift/interface` directory

Then, in that directory (lets say you created an IDL called Music.thrift) run `thrift -gen java Music.thrift` which we did for you already, and copy the jar outputted from a `mvn package` to the `lib` folder so you don’t have to worry about it. You can even just keep using the Meta implementation and just shove JSON or XML or whatever you want into it; however, it makes more sense to partition the objects some so you can create wider rows with a collection key in your table along with your partition key. You can also flatten the things by storing a HashMap on the table and retrieving it.


Published at DZone with permission of Joe Stein, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)