Я предполагаю, что это то, что вы хотите: у вас есть труба с одним полем, то есть конкатенация $ {first_name} и $ {description}. И вы хотите, чтобы на выходе был канал с полем $ {description}.
Если да, это то, что я бы сделал: реализуем function, который извлекает описание и выполняет его поток.
Вы функция (назовем его ExtractDescriptionFunction) следует переопределить метод работу с чем-то вроде этого:
@Override
public void operate(FlowProcess flowProcess, FunctionCall<Tuple> functionCall) {
TupleEntry arguments = functionCall.getArguments();
String concatenation = arguments.getString("$input_field_name");
String[] values = concatenation.split("\\|"); // you might want to have some data sanity check here
String description = values[1];
Tuple tuple = functionCall.getContext();
tuple.set(0, description);
functionCall.getOutputCollector().add(tuple);
}
Затем в вашем определении потока, добавьте это:
Pipe outputPipe = new Each(inputPipe, new ExtractDescriptionFunction());
Надеется, что это помогает ,
Спасибо за ответ, но мой вопрос: «Можем ли мы извлечь это описание за пределами трубы? По вышеуказанной функции описание извлекается, но все еще находится внутри трубы. Я хочу извлечь это описание и хочу использовать его как условие вне канала, например: if (description! = Null) {something;} (если мы не сможем извлечь причину?) – RaiBnod
Я не думаю cascading поддерживает определение потока во время выполнения.Весь набор данных имеет один и тот же канал. Это, как говорится, может помочь фильтр. В определении потока вы можете иметь что-то вроде: 'Описание трубыNullPipe = new Каждый (inPipe, new CheckDescriptionIsNullFilter());' 'Описание трубыNotNullPipe = new Каждый (inPipe, new Not (новый CheckDescriptionIsNullFilter())); – chinglun