/** * @param flowProcess * @param sinkCall * @throws IOException */ @Override public void sink( FlowProcess<JobConf> flowProcess, SinkCall<BSONWritable[], OutputCollector> sinkCall) throws IOException { TupleEntry tupleEntry = sinkCall.getOutgoingEntry(); OutputCollector outputCollector = sinkCall.getOutput(); String keyFieldName = this.fieldMappings.get(this.keyColumnName); Object key; // if fieldMappings doesn't have keyColumnName ("_id") field, then use new ObjectId() as key if (keyFieldName == null) { key = new ObjectId(); } else { key = tupleEntry.selectTuple(new Fields(keyFieldName)).get(0); } // Object key = tupleEntry.selectTuple(new // Fields(this.fieldMappings.get(this.keyColumnName))).get(0); BasicDBObject dbObject = new BasicDBObject(); for (String columnFieldName : columnFieldNames) { String columnFieldMapping = fieldMappings.get(columnFieldName); Object tupleEntryValue = null; try { if (columnFieldMapping != null) { // columnFieldMapping is null if no corresponding field name defined in Mappings. // only write the field value back to mongo if the field also defined in Mappings (ie. not // null) tupleEntryValue = tupleEntry.get(columnFieldMapping); } } catch (FieldsResolverException e) { logger.error("Couldn't resolve field: {}", columnFieldName); } if (tupleEntryValue != null && columnFieldName != keyColumnName) { // logger.info("Putting for output: {} {}", columnFieldName, tupleEntryValue); dbObject.put(columnFieldName, tupleEntryValue); } } logger.info("Putting key for output: {} {}", key, dbObject); // outputCollector.collect(new ObjectId(), dbObject); outputCollector.collect(key, dbObject); }
protected Tuple getValue(TupleEntry tupleEntry) { return tupleEntry.selectTuple(getValueFields()); }