gpt4 book ai didi

java - 使用 cqlsh 复制非常大的 cassandra 表时出现 PicklingError

转载 作者:搜寻专家 更新时间:2023-11-01 01:49:42 26 4
gpt4 key购买 nike

当我尝试使用以下命令将表复制到 cassandra 时:

copy images from 'images.csv'

我得到错误:

'PicklingError: Can't pickle <class 'cqlshlib.copyutil.ImmutableDict'>: attribute lookup cqlshlib.copyutil.ImmutableDict failed'

我已成功导入所有其他表格,但这个表格不起作用。与这个的唯一区别是它包含用于图像的大型二进制 blob。

这是 csv 文件中的示例行:

b267ba01-5420-4be5-b962-7e563dc245b0,,0x89504e...[large binary blob]...426082,0,7e700538-cce3-495f-bfd2-6a4fa968bdf6,pentium_e6600,01fa819e-3425-47ca-82aa-a3eec319a998,0,7e700538-cce3-495f-bfd2-6a4fa968bdf6,,,png,0

这是导致错误的文件: https://www.dropbox.com/s/5mrl6nuwelpf3lz/images.csv?dl=0

这是我的架构:

CREATE TABLE dealtech.images (
id uuid PRIMARY KEY,
attributes map<text, text>,
data blob,
height int,
item_id uuid,
name text,
product_id uuid,
scale double,
seller_id uuid,
text_bottom int,
text_top int,
type text,
width int
)

这些表是使用 cassandra 2.x 导出的,我目前正在使用 cassandra 3.0.9 导入它们。

最佳答案

我在使用 apache cassandra 3.9 时遇到了同样的问题,尽管我的数据集相当小(一个表中有 46 行,另一个表中有 262 行)。

PicklingError: Can't pickle <class 'cqlshlib.copyutil.link'>: attribute lookup cqlshlib.copyutil.link failed

PicklingError: Can't pickle <class 'cqlshlib.copyutil.attribute'>: attribute lookup cqlshlib.copyutil.attribute failed

在哪里linkattribute是我定义的类型。

COPY 命令是在 Docker 容器内运行的 .cql 脚本的一部分,作为其设置过程的一部分。

我在几个地方读到有人在 Windows 上看到这个 PicklingError(似乎与 NTFS 相关),但本例中的 Docker 容器使用的是 Alpine Linux。

修复方法是将这些选项添加到我的 COPY 命令的末尾:

WITH MINBATCHSIZE=1 AND MAXBATCHSIZE=1 AND PAGESIZE=10;

http://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlshCopy.html

我没有看到 PicklingError 在本地运行这些包含 COPY 命令的 .cql 脚本,所以这似乎是一个只有在内存不足的情况下才会出现的问题。

相关问题:

关于java - 使用 cqlsh 复制非常大的 cassandra 表时出现 PicklingError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44005212/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com