首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数据帧转换而来的apache箭头文件在使用arrow.js读取时提供空。

从数据帧转换而来的apache箭头文件在使用arrow.js读取时提供空。
EN

Stack Overflow用户
提问于 2019-10-09 22:48:39
回答 1查看 920关注 0票数 5

我使用.arrow将一个示例数据转换为pyarrow文件

代码语言:javascript
复制
import numpy as np
import pandas as pd
import pyarrow as pa

df = pd.DataFrame({"a": [10, 2, 3]})
df['a'] = pd.to_numeric(df['a'],errors='coerce')
table = pa.Table.from_pandas(df)
writer = pa.RecordBatchFileWriter('test.arrow', table.schema)
writer.write_table(table)
writer.close()

这将创建一个文件test.arrow

代码语言:javascript
复制
df.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 3 entries, 0 to 2
    Data columns (total 1 columns):
    a    3 non-null int64
    dtypes: int64(1)
    memory usage: 104.0 bytes

然后,在NodeJS中,我用arrowJS加载文件。https://arrow.apache.org/docs/js/

代码语言:javascript
复制
const fs = require('fs');
const arrow = require('apache-arrow');

const data = fs.readFileSync('test.arrow');
const table = arrow.Table.from(data);

console.log(table.schema.fields.map(f => f.name));
console.log(table.count());
console.log(table.get(0));

这些指纹就像

代码语言:javascript
复制
[ 'a' ]
0
null

我原以为这个表的长度是3,而table.get(0)给出的是第一行,而不是null

这张表看起来像console.log(table._schema)

代码语言:javascript
复制
[ Int_ [Int] { isSigned: true, bitWidth: 16 } ]
Schema {
  fields:
   [ Field { name: 'a', type: [Int_], nullable: true, metadata: Map {} } ],
  metadata:
   Map {
     'pandas' => '{"index_columns": [{"kind": "range", "name": null, "start": 0, "stop": 5, "step": 1}], "column_indexes": [{"name": null, "field_name": null, "pandas_type": "unicode", "numpy_type": "object", "metadata": {"encoding": "UTF-8"}}], "columns": [{"name": "a", "field_name": "a", "pandas_type": "int16", "numpy_type": "int16", "metadata": null}], "creator": {"library": "pyarrow", "version": "0.15.0"}, "pandas_version": "0.22.0"}' },
  dictionaries: Map {} }

知道为什么它没有得到预期的数据吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-17 18:23:54

这是由于Arrow 0.15格式的更改,即Apache上的韦斯提到的。这意味着当将IPC文件发送到Arrow的旧版本时,所有的Arrow库,而不仅仅是PyArrow,都会暴露出这个问题。修复方法是将ArrowJS升级到0.15.0,以便您可以在其他Arrow库和JS库之间往返。如果由于某些原因无法更新,则可以使用以下解决方案之一:

use_legacy_format=True作为kwarg传递给RecordBatchFileWriter

代码语言:javascript
复制
with pa.RecordBatchFileWriter('file.arrow', table.schema, use_legacy_format=True) as writer:
    writer.write_table(table)

将环境变量ARROW_PRE_0_15_IPC_FORMAT设置为1:

代码语言:javascript
复制
$ export ARROW_PRE_0_15_IPC_FORMAT = 1
$ python
>>> import pyarrow as pa
>>> table = pa.Table.from_pydict( {"a": [1, 2, 3], "b": [4, 5, 6]} )
>>> with pa.RecordBatchFileWriter('file.arrow', table.schema) as writer:
...   writer.write_table(table)
...

或将PyArrow降级为0.14.x

代码语言:javascript
复制
$ conda install -c conda-forge pyarrow=0.14.1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58313254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档