首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PyArrow读取CSV

使用PyArrow读取CSV
EN

Stack Overflow用户
提问于 2018-09-20 03:53:45
回答 2查看 3.4K关注 0票数 4

我有很大的CSV文件,我最终想要转换成拼图。由于内存限制和处理空值(在我的数据中很常见)的困难,Pandas不会提供帮助。我检查了PyArrow文档,有读取拼图文件的工具,但我没有看到任何有关读取CSV的内容。我是不是错过了什么,或者这个特性是否与PyArrow不兼容?

EN

回答 2

Stack Overflow用户

发布于 2018-09-20 05:28:41

我们正在开发这个特性,现在有一个拉取请求:https://github.com/apache/arrow/pull/2576。你可以通过测试来帮助你!

票数 4
EN

Stack Overflow用户

发布于 2019-01-12 06:25:48

您可以使用pd.read_csv(chunksize=...)以块为单位读取CSV,然后使用Pyarrow一次写入一个块。

正如您所提到的,需要注意的是,如果您有一列在一个块中全部为空,那么Pandas将提供不一致的数据类型,因此您必须确保块大小大于数据中最长的空值运行。

这将从stdin读取CSV,并将Parquet写入stdout (Python 3)。

代码语言:javascript
复制
#!/usr/bin/env python
import sys

import pandas as pd
import pyarrow.parquet

# This has to be big enough you don't get a chunk of all nulls: https://issues.apache.org/jira/browse/ARROW-2659
SPLIT_ROWS = 2 ** 16

def main():
    writer = None
    for split in pd.read_csv(sys.stdin.buffer, chunksize=SPLIT_ROWS):
        table = pyarrow.Table.from_pandas(split, preserve_index=False)
        # Timestamps have issues if you don't convert to ms. https://github.com/dask/fastparquet/issues/82
        writer = writer or pyarrow.parquet.ParquetWriter(sys.stdout.buffer, table.schema, coerce_timestamps='ms', compression='gzip')
        writer.write_table(table)
    writer.close()

if __name__ == "__main__":
    main()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52413318

复制
相关文章

相似问题

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