0

それぞれ1列の複数の行を書き込むMRジョブがあります。列名にnull以外の値を渡しましたが、次の例外が発生します

java.io.IOException:org.apache.cassandra.hadoop.ColumnFamilyRecordWriter $ RangeClient.run(ColumnFamilyRecordWriter.java:307)でのInvalidRequestException(why:column nameは空であってはなりません)原因:InvalidRequestException(why:columnnameは空であってはなりません)空)org.apache.cassandra.thrift.Cassandra $ batch_mutate_result.read(Cassandra.java:19477)at org.apache.cassandra.thrift.Cassandra $ Client.recv_batch_mutate(Cassandra.java:1035)at org.apache.cassandra .thrift.Cassandra $ Client.batch_mutate(Cassandra.java:1009)at org.apache.cassandra.hadoop.ColumnFamilyRecordWriter $ RangeClient.run(ColumnFamilyRecordWriter.java:299)

ここで私が見逃しているものはありますか?

これが私が書いたレデューサーです-

public static class SampleReducer extends Reducer> {static Logger logger = LoggerFactory.getLogger(AndroidEthnicityMap.class);

            @Override
            protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException ,InterruptedException {
                    String tStr[] = key.toString().split("__");
                    logger.info("The string to be reduced is " + key.toString());
                    String appid = tStr[0];
                    String columnName = tStr[1];
                    String columnValue = "{}";
                    if(values.iterator().hasNext())
                            columnValue = values.iterator().next().toString();



                    ByteBuffer bbcn = ByteBufferUtil.bytes(columnName);
                    ByteBuffer bbcv = ByteBufferUtil.bytes(columnValue);
                    ByteBuffer bbkey = ByteBufferUtil.bytes(appid);

                    Mutation m = new Mutation();
                    m.setColumn_or_supercolumn(new ColumnOrSuperColumn());
                    Column c = new Column();
                    c.setName(ByteBufferUtil.bytes(columnName));
                    c.setValue(ByteBufferUtil.bytes(columnValue));
                    c.setTimestamp(System.currentTimeMillis());
                    m.column_or_supercolumn.setColumn(c);

                    Mutation[] marray = new Mutation[]{m};
                    context.write(ByteBufferUtil.bytes(appid), Arrays.asList(marray));

            }
    }
4

2 に答える 2

1

「空」とは、「null以外、長さがゼロ」を意味します。これは有効な列名ではありません。

于 2012-10-09T14:18:15.540 に答える
0

レデューサーにログを追加して、コンテキストに対応するすべての列名を確認します。列ファミリーは空の文字列のようです。colNameだけでなく、すべてのデータをログに記録します

于 2013-04-28T06:35:24.397 に答える