【发布时间】:2017-10-15 18:09:49
【问题描述】:
当我尝试使用以下命令将表复制到 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 导入它们。
【问题讨论】:
-
能不能导入这个
b267ba01-5420-4be5-b962-7e563dc245b0,,0x89504e426082,0,7e700538-cce3-495f-bfd2-6a4fa968bdf6,pentium_e6600,01fa819e-3425-47ca-82aa-a3eec319a998,0,7e700538-cce3-495f-bfd2-6a4fa968bdf6,,,png,0我已经导入成功了 -
是的,我可以导入它。当我使用非常大的二进制 blob(例如图像)时,似乎会出现此问题。
-
这是导致错误的图像文件。 dropbox.com/s/5mrl6nuwelpf3lz/images.csv?dl=0
-
我找到了导入图像的解决方法。一次加载一行适用于:从'images.csv'复制dealtech.images,skirows = 0和maxrows = 1;从“images.csv”复制 dealtech.images,skirows=1 和 maxrows=2;从“images.csv”复制 dealtech.images,skirows=2 和 maxrows=3; ...当您尝试一次加载太大的文件时,可能只是内存错误。
-
我也遇到了这个问题,但这是因为其他原因。我已经运行了 COPY 命令来导入一个大型数据集,但经过一些调查发现键空间复制不正确。我使用的是本地 docker 实例,尽管键空间定义使用
NetworkTopologyStrategy来表示不存在的键空间。检查一下你是否也遇到了这个问题!