Tuple is Heron's core data type. All data that is fed into a Heron topology via spouts and then processed by bolts consists of tuples.
Heron has a Tuple
interface for working with tuples. Heron Tuple
s can hold values of any type; values are accessible either by providing an index or a field name.
Heron's Tuple
interface contains the methods listed in the Javadoc definition.
Heron Tuple
s support a wide variety of primitive Java types, including strings, Booleans, byte arrays, and more. getString
method, for example, takes an integer index and returns either a string or null
if no string value is present at that index. Analogous methods can be found in the Javadoc.
In addition to being accessible via index, values stored in Heron tuples are accessible via field name as well. The getStringByField
method, for example, takes a field name string and returns either a string or null
if no string value is present for that field name. Analogous methods can be found in the Javadoc.
In addition to primitive types, you can access any value in a Heron Tuple
as a Java Object
. As for primitive types, you can access Object
s on the basis of an index or a field name. The following methods return either an Object
or null
if no object is present:
You can also retrieve all objects contained in a Heron Tuple
as a Java List using the getValues
method.
You use Heron tuples in conjunction with more complex, user-defined types using type casting, provided that you‘ve created and registered a custom serializer for the type. Here’s an example (which assumes that a serializer for the type Tweet
has been created and registered):
public void execute(Tuple input) { // The following return null if no value is present or throws a // ClassCastException if type casting fails: Tweet tweet = (Tweet) input.getValue(0); List<Tweet> allTweets = input.getValues(); }
More info on custom serialization can be found in Creating Custom Tuple Serializers.
The getFields
method returns a Fields
object that contains all of the fields in the tuple. More on fields can be found below.
There are additional methods available for determining the size of Heron Tuple
s, extracting contextual information, and more. For a full listing of methods, see the Javadoc.
From the methods in the list above you can see that you can retrieve single values from a Heron tuple on the basis of their index. You can also retrieve multiple values using a Fields
object, which can be initialized either using varargs or a list of strings:
// Using varargs Fields fruits = new Fields("apple", "orange", "banana"); // Using a list of strings List<String> fruitNames = new LinkedList<String>(); fruitNames.add("apple"); // Add "orange" and "banana" as well Fields fruits = new Fields(fruitNames);
You can then use that object in conjunction with a tuple:
public void execute(Tuple input) { List<Object> values = input.select(fruits); for (Object value : values) { System.out.println(value); } }