在我有5000000行的数据集中,我想添加一个名为“嵌入”的列到我的数据集中。dataset = dataset.add_column('embeddings', embeddings)
变量 embeddings 是一个大小为(5000000,512)的numpy memmap数组。
但我得到了这个错误:
ArrowInvalidTraceback(most recent call last)in ----> 1 dataset = dataset.add_column('embeddings ',embeddings)
/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py in wrapper(*args,**kwargs)486 } 487 # apply actual function --> 488 out:Union[“Dataset”,“DatasetDict”] = func(self,*args,**kwargs)489个数据集:List[“Dataset”] = list(out.values())if isinstance(out,dict)else [out] 490 #重新应用格式到输出
/opt/conda/lib/python3.8/site-packages/datasets/fingerprint.py in wrapper(*args,**kwargs)404 #调用实际函数405 --> 406 out = func(self,*args,**kwargs)407 408 #更新就地转换的指纹+更新就地转换的历史
/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py in add_column(self,name,column,new_fingerprint)3346:class:Dataset
3347“"”-> 3348 column_table = InMemoryTable.from_pydict({name:column})3349 #水平连接表3350 table = ConcatenationTable.from_tables([self._data,column_table],axis=1)
/opt/conda/lib/python3.8/site-packages/datasets/table.py in from_pydict(cls,*args,**kwargs)367@classmethod 368 def from_pydict(cls,*args,**kwargs):--> 369 return cls(pa.Table.from_pydict(*args,**kwargs))370 371@inject_arrow_table_documentation(pa.Table.from_batches)
/opt/conda/lib/python3.8/site-packages/pyarrow/table.pxi in pyarrow.lib.Table.from_pydict()
/opt/conda/lib/python3.8/site-packages/pyarrow/table.pxi in pyarrow.lib._from_pydict()
/opt/conda/lib/python3.8/site-packages/pyarrow/array.pxi in pyarrow.lib.asarray()
/opt/conda/lib/python3.8/site-packages/pyarrow/array.pxi in pyarrow.lib.array()
/opt/conda/lib/python3.8/site-packages/pyarrow/array.pxi in pyarrow.lib._ndarray_to_array()
/opt/conda/lib/python3.8/site-packages/pyarrow/error.pxi in pyarrow.lib.check_status()
箭头无效:只处理一维数组
既然嵌入数组不适合RAM,我如何解决这个问题?
3条答案
按热度按时间qco9c6ql1#
你得到一个数据集
mm5n2pyu2#
这里的问题是,您试图添加一个列,但您传递的数据是一个2d numpy数组。
arrow
(用于表示数据集的库)仅支持1d numpy数组。你可以尝试逐个添加2d numpy数组的每一列:
既然嵌入数组不适合RAM,我如何解决这个问题?
我不认为有一个围绕内存问题的工作。HuggingFace数据集由箭头表支持,箭头表必须适合内存。
v9tzhpje3#
我是这样解决这个问题的。可悲的是,我们已经到了2023年,这个问题仍然存在,但幸运的是,这对我很有效。
向数据集添加新列
然后,你可以像这样调用函数:
**注意:**请确保新列的大小(A.K.A)
len(new_values)
等于现有行数的大小。