Apache Storm: как преобразовать (сделать новый) кортеж - PullRequest
0 голосов
/ 18 мая 2018

Это, вероятно, не лучшая практика в шторме, но мы работаем с библиотекой, которая требует от нас преобразовать значения кортежа в нашем болте, чтобы отфильтровать только объекты определенного класса.Я знаю, как сделать фильтр, однако я не уверен, как я могу собрать новый кортеж с преобразованным (то есть, фильтрованным) кортежем:

override fun execute(input: Tuple?) {
  val filteredValues = input.values.filterIsInstance(MyClass::class.java)
  // ? how do I make a new tuple with filteredValues
  val newTuple = ...
  if (doExecute(newTuple)) {
    this.collector.ack(input)
  } else {
    this.collector.fail(input)
  }
}

, где doExecute вне нашегоуправления, и он принимает только кортеж.

РЕДАКТИРОВАТЬ Я думаю, это возможно, если я создал копию входного кортежа и просто установить values копии на filteredValues.Однако мне интересно, есть ли более идиоматический способ?

1 Ответ

0 голосов
/ 18 мая 2018

Я бы просто разделил ваш болт на две части.Иметь болт, который выполняет фильтрацию, а затем второй болт, который получает от болта фильтра и вызывает doExecute.

...