2015-12-29 2 views
1

Я проходил один из примеров Apache Storm. Ниже приведен фрагмент номера Bolt
public void declareOutputFields (OutputFieldsDeclarer declarer) {
declarer.declare (новые поля («слово»));
}Какова цель класса Fields в Apache Storm

Декларант используется для обозначения вида поля, из которого исходит Болт. так что означает синтаксис выше, когда он говорит «Новые поля (« слово »)».

ответ

2

Он определяет схему ваших выходных кортежей. То есть, сколько атрибутов имеет кортеж и имя для каждого атрибута.

Fields("word") определяет схему с одним атрибутом word. Таким образом, если вы вызываете collector.emit(new Values(...)), список параметров должен содержать одно значение.

На стороне приемника (то есть болт, который потребляет выходной поток) вы можете получить доступ к атрибутам с помощью индекса или имени; это имя, которое было объявлено через Fields продюсером.

В вашем примере потребитель может получить доступ к атрибуту через input.getX(0) или input.getXByName("word").

+0

Итак, вы говорите, что это слово «слово» не имеет никакого значения. мы можем использовать любую строку вместо слова, и она должна работать. Единственное, что мне нужно позаботиться, это то, что строка «слово» должна быть одинаковой в Полях («слово») и новых значениях («слово»). Я прав ? –

+0

Да, почти. Вы можете указать любое имя для атрибутов. Хотя «word» - это имя атрибута, «new Values ​​(« actualWord »)» создает новый Tuple с атрибутом value «actualWord» для атрибута «word». Если вы получаете доступ к атрибутам через индекс в болте приемника, имя атрибута не имеет значения. –

Смежные вопросы