【发布时间】:2021-01-14 09:10:48
【问题描述】:
我在本地 cassandra 中使用 cqlsh 创建了一个列族,如下所示。
CREATE TABLE sample.stackoverflow_question12 (
id1 int,
class1 int,
name1 text,
PRIMARY KEY (id1)
)
我有一个名为“data.csv”的示例 csv 文件,文件中的数据如下。
id1 | name1 |class1
1 |你好 | 10
2 |世界| 20
使用下面的python代码连接db并使用Anaconda从csv加载数据(在anaconda中使用pip安装Cassandra驱动程序后)
#Connecting to local Cassandra server
from Cassandra.Cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
auth_provider = PlainTextAuthProvider(username='cassandra', password='cassandra')
cluster = Cluster(["127.0.0.1"],auth_provider = auth_provider,protocol_version=4)
session = cluster.connect()
session.set_keyspace('sample')
cluster.connect()
#File loading
prepared = session.prepare(' Insert into stackoverflow_question12 (id1,class1,name1)VALUES (?, ?, ?)')
with open('D:/Cassandra/NoSQL/data.csv', 'r') as fares:
for fare in fares:
columns=fare.split(",")
id1=columns[0]
class1=columns[1]
name1=columns[2]
session.execute(prepared, [id1,class1,name1])
#closing the file
fares.close()
当我执行上面的代码时出现以下错误。
收到列“id1”的无效类型参数。预期:
当我将数据类型更改为文本并运行上述代码时,它也会加载带有标题字段的数据。
谁能帮我修改我的代码以加载没有标题内容的数据?或者你成功的代码也可以。
将列名设为 id1 和 class1 的原因是 id 和 class 是关键字,并且在“fares”循环中使用时会在代码中引发错误。
但在现实世界中,列名将被视为类和 id。当这些类型的列出现时如何运行代码?
我想到的另一个问题是 Cassandra 将首先存储主键,然后按升序存储剩余键。我们可以加载与 Cassandra 列存储不同的索引的 csv 列吗?
基于此,我需要构建另一个解决方案。
【问题讨论】:
标签: python csv cassandra pycassa