RCassandra 尝试存储“iris”数据集的奇怪错误
Posted
技术标签:
【中文标题】RCassandra 尝试存储“iris”数据集的奇怪错误【英文标题】:strange error with RCassandra trying to store the "iris" dataset 【发布时间】:2014-12-18 13:35:34 【问题描述】:我是 Apache Cassandra 的新手。我安装了 R 扩展 RCassandra 并创建了下表:
CREATE TABLE iris (
id varchar,
"Sepal.Length" double,
"Sepal.Width" double,
"Petal.Length" double,
"Petal.Width" double,
Species text,
PRIMARY KEY(id)
);
成功连接并选择键空间后,我尝试以下操作:
> RC.write.table(c,'iris',iris)
iris
数据集具有以下形式:
> iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
...
但我收到以下错误:
Error in RC.write.table(c, "iris", iris) :
Cassandra exception: Not enough bytes to read value of component 0
可能id
字段比较麻烦,所以我通过在数据框中添加id
列来创建以下数据集:
iris2 = data.frame(id=row.names(iris),iris)
iris2
id Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 1 5.1 3.5 1.4 0.2 setosa
2 2 4.9 3.0 1.4 0.2 setosa
3 3 4.7 3.2 1.3 0.2 setosa
4 4 4.6 3.1 1.5 0.2 setosa
...
但我仍然遇到同样的错误:
> RC.write.table(c,'iris',iris2)
Error in RC.write.table(c, "iris", iris2) :
Cassandra exception: Not enough bytes to read value of component 0
关于如何解决这个问题的任何想法?
【问题讨论】:
我没有使用过 RCassandra,但你可以尝试更改列名来避免句点,例如萼片长度-> 萼片长度。我知道其他一些工具有这方面的问题,甚至认为它在 CQL/Cassandra 中在技术上是有效的。 【参考方案1】:您是否使用 CQLSH 在 Cassandra 中创建列族(“表”)?我自己有没有同样的问题。然后切换到使用 cassandra-cli 并创建列族 this way,并且它起作用了。
RCassandra 很可能在下面使用 cli,并且因为在 CQLSH 中创建的 CF 在 cassandra-cli 中不可见,所以它看不到 CQL 表。
【讨论】:
我不再使用RCassandra
,因为它已经过时(与以前版本的 Cassandra 兼容)。现在我使用rJava
/DBI
/RJDBC
,一切正常。然后,当然,列名需要保守地小写并且没有奇怪的字符,如点以上是关于RCassandra 尝试存储“iris”数据集的奇怪错误的主要内容,如果未能解决你的问题,请参考以下文章