我有很大的CSV文件,我最终想要转换成拼图。由于内存限制和处理空值(在我的数据中很常见)的困难,Pandas不会提供帮助。我检查了PyArrow文档,有读取拼图文件的工具,但我没有看到任何有关读取CSV的内容。我是不是错过了什么,或者这个特性是否与PyArrow不兼容?
发布于 2018-09-20 05:28:41
我们正在开发这个特性,现在有一个拉取请求:https://github.com/apache/arrow/pull/2576。你可以通过测试来帮助你!
发布于 2019-01-12 06:25:48
您可以使用pd.read_csv(chunksize=...)以块为单位读取CSV,然后使用Pyarrow一次写入一个块。
正如您所提到的,需要注意的是,如果您有一列在一个块中全部为空,那么Pandas将提供不一致的数据类型,因此您必须确保块大小大于数据中最长的空值运行。
这将从stdin读取CSV,并将Parquet写入stdout (Python 3)。
#!/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()https://stackoverflow.com/questions/52413318
复制相似问题