对于下面的代码,每当我使用row.getToken("fieldname")
时,我都会收到InvalidTypeException。
Record RowToRecord(Row rw) {
ColumnDefinitions cd = rw.getColumnDefinitions();
Record rec = new Record();
int i;
for(i = 0; i < cd.size(); i++) {
rec.fields.add(cd.getName(i));
System.out.println(cd.getName(i));
//System.out.println((rw.getToken(cd.getName(i))).getValue());
Token tk = rw.getToken(cd.getName(i)); //// InvalidTypeException on this line.
//System.out.println(tk.getValue()+" "+tk.getType().toString());
rec.values.add(tk.getValue());
rec.types.add(tk.getType().toString());
//Token tk = new Token();
}
return rec;
}
1条答案
按热度按时间b1payxdu1#
getToken
用于在包含Cassandra标记的列上调用。在99%的情况下,这将是调用token()
CQL函数的结果,例如此查询中的第一列:您的代码对所有列都调用它,一旦您的列与标记的CQL类型不匹配,它就会失败。
该CQL类型取决于集群中使用的分区器:
token(...)
将返回BIGINT理论上,您可以对任何具有这种类型的列调用
getToken
(尽管在实践中,它可能只对token()
调用的结果列有意义,如上所述)。