【问题标题】:how to load csv data without header into cassandra column family using python script如何使用python脚本将没有标题的csv数据加载到cassandra列族中
【发布时间】: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


    【解决方案1】:

    您需要根据架构使用类型 - 对于整数列,您需要使用 int(columns...),因为 split 会生成字符串。如果你想跳过标题,那么你可以这样做:

    cnt = 0
    with open('D:/Cassandra/NoSQL/data.csv', 'r') as fares:
        if cnt = 0:
           continue
        for fare in fares:
           ...
    

    虽然最好使用可以自定义为自动跳过标题的Python's built-in CSV reader...

    附:如果您只想从 CSV 加载数据,我建议使用外部工具,例如 DSBulk,它们非常灵活并且针对该任务进行了大量优化。有关示例,请参阅以下博客文章:

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2021-02-16
      • 2023-01-09
      • 2019-02-21
      • 2015-07-11
      • 2016-01-28
      • 1970-01-01
      • 2012-05-18
      • 2014-01-09
      相关资源
      最近更新 更多