package org.apache.hadoop.hive.cassandra.input; import java.util.LinkedHashMap; import java.util.Map; import org.apache.cassandra.hadoop.ColumnFamilyRecordReader; import org.apache.hadoop.hive.serde2.lazy.LazyMap; import org.apache.hadoop.hive.serde2.lazy.LazyObject; import org.apache.hadoop.hive.serde2.lazy.LazyPrimitive; import org.apache.hadoop.hive.serde2.lazy.objectinspector.LazyMapObjectInspector; public class LazyCassandraCellMap extends LazyMap{ private ColumnFamilyRecordReader rowResult; private String cassandraColumnFamily; protected LazyCassandraCellMap(LazyMapObjectInspector oi) { super(oi); } public void init(ColumnFamilyRecordReader rr, String columnFamily) { rowResult = rr; cassandraColumnFamily = columnFamily; setParsed(false); } private void parse() { if (cachedMap == null) { cachedMap = new LinkedHashMap<Object, Object>(); } else { cachedMap.clear(); } } /** * Get the value in the map for the given key. * * @param key * @return */ @Override public Object getMapValueElement(Object key) { if (!getParsed()) { parse(); } for (Map.Entry<Object, Object> entry : cachedMap.entrySet()) { LazyPrimitive<?, ?> lazyKeyI = (LazyPrimitive<?, ?>) entry.getKey(); // getWritableObject() will convert LazyPrimitive to actual primitive // writable objects. Object keyI = lazyKeyI.getWritableObject(); if (keyI != null) { if (keyI.equals(key)) { // Got a match, return the value LazyObject v = (LazyObject) entry.getValue(); return v == null ? v : v.getObject(); } } } return null; } @Override public Map<Object, Object> getMap() { if (!getParsed()) { parse(); } return cachedMap; } @Override public int getMapSize() { if (!getParsed()) { parse(); } return cachedMap.size(); } }