hadoop-common-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Hadoop Wiki] Update of "SerDe" by PradeepKamath
Date Wed, 23 Jun 2010 21:40:15 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Hadoop Wiki" for change notification.

The "SerDe" page has been changed by PradeepKamath.


  = Input processing =
  Hive's execution engine (referred to as just engine henceforth) first uses the configured
!InputFormat to read in a record of data (the value object returned by the !RecordReader of
the !InputFormat). The engine then invokes Serde.deserialize() to perform deserialization
of the record. There is no real binding that the deserialized object returned by this method
indeed be a fully deserialized one. For instance, in Hive there is a !LazyStruct object which
is used by the !LazySimpleSerde to represent the deserialized object. This object does not
have the bytes deserialized up front but does at the point of access of a field. The engine
also gets hold of the !ObjectInspector to use by invoking Serde.getObjectInspector(). This
has to be a subclass of structObjectInspector since a record representing a row of input data
is essentially a struct type. The engine passes the deserialized object and the object inspector
to all operators for their use in order to get the needed data from the record. The object
inspector knows how to construct individual fields out of a deserialized record. For example,
!StructObjectInspector has a method called getStructFieldData() which returns a certain field
in the record. This is the mechanism to access individual fields. For instance !ExprNodeColumnEvaluator
class which can extract a column from the input row uses this mechanism to get the real column
object from the serialized row object. This real column object in turn can be a complex type
(like a struct). To access sub fields in such complex typed objects, an operator would use
the object inspector associated with that field (The top level !StructObjectInspector for
the row maintains a list of field level object inspectors which can be used to interpret individual
fields). For UDFs the new GenericUDF abstract class provides the !ObjectInspector associated
with the UDF arguments in the initialize() method. So the engine first initializes the UDF
by calling this method. The UDF can then use these !ObjectInspectors to interpret complex
arguments (for simple arguments, the 
- object
-  handed to the udf is already the right primitive object like LongWritable/IntWritable etc).
+ object handed to the udf is already the right primitive object like LongWritable/IntWritable
  = Output processing =

View raw message