Может быть, это может вам помочь. Я нашел это от apache ... org
Настройка способа разделения линий на пары ключ / значение
Как отмечалось ранее, когда платформа Map / Reduce считывает строку из стандартного вывода преобразователя, она разбивает строку на пару ключ / значение. По умолчанию префикс строки до первого символа табуляции является ключом, а остальная часть строки (исключая символ табуляции) - значением.
Однако вы можете настроить этот параметр по умолчанию. Вы можете указать разделитель полей, отличный от символа табуляции (по умолчанию), и вы можете указать n-й (n> = 1) символ вместо первого символа в строке (по умолчанию) в качестве разделителя между ключом и значением. Например:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4
В приведенном выше примере -D stream.map.output.field.separator=.
указывает "." в качестве разделителя полей для выходных данных карты и префикса до четвертого "." в строке будет ключ, а остальная часть строки (исключая четвертое «.») будет значением. Если строка содержит менее четырех символов ".", Тогда ключом будет вся строка, а значением будет пустой текстовый объект (например, созданный новым текстом ("")).
Аналогично, вы можете использовать -D stream.reduce.output.field.separator=SEP
и -D stream.num.reduce.output.fields=NUM
, чтобы указать n-й разделитель полей в строке выходных сигналов уменьшения в качестве разделителя между ключом и значением.
Аналогично, вы можете указать stream.map.input.field.separator
и stream.reduce.input.field.separator
в качестве разделителя ввода для отображения / уменьшения входов. По умолчанию разделителем является символ табуляции.