FlatMapInvokable.java 1.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/***********************************************************************************************************************
 *
 * Copyright (C) 2010-2014 by the Stratosphere project (http://stratosphere.eu)
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 *
 **********************************************************************************************************************/

16
package eu.stratosphere.streaming.api;
G
ghermann 已提交
17 18 19

import eu.stratosphere.api.java.functions.FlatMapFunction;
import eu.stratosphere.api.java.tuple.Tuple;
20
import eu.stratosphere.streaming.api.invokable.UserTaskInvokable;
G
ghermann 已提交
21
import eu.stratosphere.streaming.api.streamrecord.StreamRecord;
22
import eu.stratosphere.util.Collector;
G
ghermann 已提交
23 24 25 26 27

public class FlatMapInvokable<T extends Tuple, R extends Tuple> extends UserTaskInvokable<T, R> {
	private static final long serialVersionUID = 1L;

	private FlatMapFunction<T, R> flatMapper;
G
gyfora 已提交
28 29
	public FlatMapInvokable(FlatMapFunction<T, R> flatMapper) {
		this.flatMapper = flatMapper;
G
ghermann 已提交
30 31 32
	}
	
	@Override
33
	public void invoke(StreamRecord record, Collector<R> collector) throws Exception {
G
ghermann 已提交
34 35
		int batchSize = record.getBatchSize();
		for (int i = 0; i < batchSize; i++) {
G
gyfora 已提交
36
			@SuppressWarnings("unchecked")
G
ghermann 已提交
37 38 39 40 41
			T tuple = (T) record.getTuple(i);
			flatMapper.flatMap(tuple, collector);
		}
	}		
}