cassandra中的Bulk Loader:字符串作为cassandra中的行键

时间:2013-10-11 08:14:46

标签: java cassandra bulkloader

code的帮助下,我已经使用key_validation_class = LexicalUUIDType为新行完成了批量加载,但我更改了我的 key_validation_class = AsciiType key_validation_class = UTF8Type 为了使字符串成为行键

  create column family Users1
  with key_validation_class=AsciiType
   and comparator=AsciiType
  AND column_metadata = [ 
  {column_name: timestamp1, validation_class: AsciiType}
  {column_name: symbol, validation_class: AsciiType}
  {column_name: Bid_Price, validation_class:AsciiType}
  {column_name: Ask_Price, validation_class:AsciiType}
  ];

我已尝试对代码进行所有可能的更改,以便将行键设置为字符串类型但出现错误,甚至没有 usersWriter.newRow 无法写入sstable

  while ((line = reader.readLine()) != null)
    {
         if (entry.parse(line, lineNumber))
        {   
            //usersWriter.newRow(uuid);
            usersWriter.newRow(String.valueOf(lineNumber));
            usersWriter.addColumn(bytes("symbol"), bytes(entry.symbol), timestamp);
            usersWriter.addColumn(bytes("timestamp1"), bytes(entry.timestamp1), timestamp);
            usersWriter.addColumn(bytes("Bid_Price"), bytes(entry.Bid_Price), timestamp);
            usersWriter.addColumn(bytes("Ask_Price"), bytes(entry.Ask_Price), timestamp);
        }
        lineNumber++;
    }

按预期收到错误,只是 ByteBuffer

 usersWriter.newRow(String.valueOf(lineNumber));
                       ^
 required: ByteBuffer
 found: String
 reason: actual argument String cannot be converted to ByteBuffer by method invocation  conversion

任何帮助将字符串作为sstable中的行键用于上面的列族定义。谢谢。

1 个答案:

答案 0 :(得分:0)

来自Using the Cassandra Bulk Loader

  

简单编写器的方法期望ByteBuffers用于行键,   列名和列值。将数据转换为字节是您的   责任;这是bytes()方法的 raison d'être

所以你应该编写如下代码:

usersWriter.newRow(bytes(String.valueOf(lineNumber)));