Мне нужно вывести результаты задания MR в несколько семейств столбцов CQL3.
В своем редюсере я указываю CF с помощью MultipleOutputs, но все результаты записываются в один CF, определенный в операторе OutputCQL задания.
Определение работы:
...
job.setOutputFormatClass(CqlOutputFormat.class);
ConfigHelper.setOutputKeyspace(job.getConfiguration(), "keyspace1");
MultipleOutputs.addNamedOutput(job, "CF1", CqlOutputFormat.class, Map.class, List.class);
MultipleOutputs.addNamedOutput(job, "CF2", CqlOutputFormat.class, Map.class, List.class);
CqlConfigHelper.setOutputCql(job.getConfiguration(), "UPDATE keyspace1.CF1 SET value = ? ");
...
Настройка класса редуктора:
mos = new MultipleOutputs(context);
Метод сокращения (псевдокод):
keys = new LinkedHashMap<>();
keys.put("key", ByteBufferUtil.bytes("rowKey"));
keys.put("name", ByteBufferUtil.bytes("columnName"));
List<ByteBuffer> variables = new ArrayList<>();
variables.add(ByteBufferUtil.bytes("columnValue"));
mos.write("CF2", keys, variables);
Проблема в том, что мой редьюсер игнорирует CF, который я указываю в mos.write(), и вместо этого должен просто запускать outputCQL. Итак, в приведенном выше примере все записывается в CF1.
Я пытался использовать подготовленный оператор для вставки CF в outputCQL по строкам «UPDATE keyspace1.? SET value =?», но я не думаю, что возможно использовать заполнитель для CF, как это.
Есть ли способ перезаписать outputCQL внутри класса редуктора?