Cassovary alternatives and similar packages
Based on the "Extensions" category.
Alternatively, view Cassovary alternatives based on common mentions on social networks and blogs.
-
cats
Lightweight, modular, and extensible library for functional programming. -
Enumeratum
A type-safe, reflection-free, powerful enumeration implementation for Scala with exhaustive pattern match warnings and helpful integrations. -
scala.meta
Library to read, analyze, transform and generate Scala programs -
Scala-Logging
Convenient and performant logging library for Scala wrapping SLF4J. -
Chimney
Scala library for boilerplate-free, type-safe data transformations -
Freestyle
A cohesive & pragmatic framework of FP centric Scala libraries -
Scala Graph
Graph for Scala is intended to provide basic graph functionality seamlessly fitting into the Scala Collection Library. Like the well known members of scala.collection, Graph for Scala is an in-memory graph library aiming at editing and traversing graphs, finding cycles etc. in a user-friendly way. -
tinylog
tinylog is a lightweight logging framework for Java, Kotlin, Scala, and Android -
scribe
The fastest logging library in the world. Built from scratch in Scala and programmatically configurable. -
Each
A macro library that converts native imperative syntax to scalaz's monadic expressions -
Rapture
a collection of libraries for common, everyday programming tasks (I/O, JSON, i18n, etc.) -
Stateless Future
Asynchronous programming in fully featured Scala syntax. -
Scala Blitz
Scala framework for efficient sequential and data-parallel collections - -
Squid
Squid – type-safe metaprogramming and compilation framework for Scala -
Records for Scala
Labeled records for Scala based on structural refinement types and macros. -
Play monadic actions
A simple scala DSL to allow clean and monadic style for Play! Actions -
enableIf.scala
A library that toggles Scala code at compile-time, like #if in C/C++ -
Freasy Monad
Easy way to create Free Monad using Scala macros with first-class Intellij support. -
Lamma
Lamma schedule generator for Scala is a professional schedule generation library for periodic schedules like fixed income coupon payment, equity deravitive fixing date generation etc. -
wvlet-log
A library for enhancing your application logs with colors and source code locations. -
Freedsl
Practical effect composition library based on abstract wrapping type and the free monad -
Resolvable
A library to optimize fetching immutable data structures from several endpoints in several formats.
Clean code begins in your IDE with SonarLint
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Cassovary or a related project?
README
Cassovary
Cassovary is a simple "big graph" processing library for the JVM. Most JVM-hosted graph libraries are flexible but not space efficient. Cassovary is designed from the ground up to first be able to efficiently handle graphs with billions of nodes and edges. A typical example usage is to do large scale graph mining and analysis of a big network. Cassovary is written in Scala and can be used with any JVM-hosted language. It comes with some common data structures and algorithms.
Please follow the cassovary project on twitter at @cassovary for updates.
Quick Start and Examples
After cloning the repository, type ./sbt
which will download the sbt launch jar and launch
the sbt console. Then type the following in the console:
project cassovary-examples
runMain HelloLoadGraph
There is a subproject included called cassovary-examples containing simple java and scala examples of using the library. See this README to get started with these examples.
Some other subprojects to check are cassovary-benchmarks for helping benchmark some graph algorithms and cassovary-server that exposes Cassovary on a web server.
Building
Cassovary is built using sbt and was tested last using sbt version 0.13.9
./sbt update
(might take a couple of minutes)./sbt test
./sbt package
Alternative for using for local projects
./sbt publishLocal
cd ../<dependent project>
./sbt update
Using maven published version of library
Cassovary is published to maven central with scala version 2.11.8 starting Cassovary version 7.0.0. The latest published Cassovary version number that also works with scala 2.10 is version 6.4.0. Please see the latest version number (such as 7.1.0) released alongside the maven-central image at the top of this README.
To use with sbt, substitute the latest version number and use:
libraryDependencies += "com.twitter" %% "cassovary-core" % "7.1.0"
and
resolvers += "twitter" at "http://maven.twttr.com"
The last Cassovary version to support scala 2.9 is 3.4.0, and support for scala version 2.9.x has been discontinued since. The last Cassovary version to support scala 2.10 is 6.4.0, and support for scala version 2.10.x has been discontinued since. Also, Cassovary requires Java 7+ and the last Cassovary version to support Java 6 was 3.4.0.
The only dependency that Cassovary uses which is not bundled with it (because of its size)
is it.unimi.dsi.fastutil
. You can add that dependency in your sbt project as follows:
libraryDependencies += "it.unimi.dsi" % "fastutil" % "7.0.7"
Comparison to Other Graph Libraries
There are many excellent graph mining libraries already in existence. Most of them have one or more of the following characteristics:
- Written in C/C++. Examples include SNAP from Stanford and GraphLab from CMU. The typical way to use these from JVM is to use JNI bridges.
- Sacrifice storage efficiency for flexibility. Examples include JUNG which is written in Java but stores nodes and edges as big objects.
- Are meant to do much more, typically a full graph database. Examples include Neo4J.
On the other hand, Cassovary is intended to be easy to use in a JVM-hosted
environment and yet be efficient enough to scale to billions of edges.
It is deliberately not designed to provide any persistence or database functionality.
Also, it currently skips any concerns of partitioning the graph and hence is
not directly comparable to distributed graph processing systems like
Apache Giraph. This allows complex algorithms
to be run on the graph efficiently, an otherwise recurring issue with distributed
graph processing systems because of the known difficulty of achieving good
graph partitions. On the flip side, the size of the
graph it works with is bounded by the memory available in a machine, though
the use of space efficient data structures does not seem to make this a
limitation for most practical graphs. For example, a SharedArrayBasedDirectedGraph
instance of a unidirectional graph with 10M nodes and 1B edges consumes
less than 6GB of memory, and scales linearly beyond that. Some other data points for memory
usage can be checked out using the script bash cassovary-examples/src/main/bash/load-graph-examples.sh
.
As the script shows, a randomly generated unidirectional directed graph with 0.5M nodes and 10M edges can be built
with 60MB of memory, and one with 5M nodes and 100M edges can be built with 500MB of memory. Loading both
directions of those graphs takes respectively 120MB and 1.1GB of memory.
Mailing list
http://groups.google.com/group/twitter-cassovary
Please follow the cassovary project on twitter at @cassovary for updates.
Bugs
Please report any bugs to: https://github.com/twitter/cassovary/issues
Acknowledgments
Thanks to all the contributors of Cassovary.
We use the Yourkit Java Profiler for profiling and tuning Cassovary.
License
Copyright 2016 Twitter, Inc.
Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
*Note that all licence references and agreements mentioned in the Cassovary README section above
are relevant to that project's source code only.