1

我将带有“零副本”的箭头对象转换为熊猫,但结果对象未对齐。

#create a pyarrow.table.Table from parquet file
pq_file=pq.ParquetFile(parquet_file_name)
arrow_table=pq_file.read()

#convert pyarrow.table.Table to panda with zero copy
df=arrow_table.to_pandas(zero_copy_only=True)

#check if the numpy array is aligned :
print("alignment: {}".format(df.as_matrix().__array_interface__['data'[0]%64))

代码返回:alignment: 16

结论:NumPy 数组未对齐。当我将 pyarrow.table.Table 转换为“零副本”的 panda 时,我得出结论 pyarrow.table.Table 本身未对齐。我哪里错了?

4

1 回答 1

1

uwe的回复:

  1. 我不确定zero_copy_only标志是否在 Arrow 0.8 中正常工作,我们最近做了一些修复(但尚未发布)。
  2. 即将发布的版本中有一个新buffers属性,您还可以在其中检查 PyArrow 箭头的内存地址。这对于在 Python 中验证零拷贝是否真的是零拷贝很有用。
  3. 您需要注意,df.as_matrix()如果您没有具有单个 DType 的 DataFrame,也可能会进行复制。
于 2018-03-09T09:42:08.177 回答