流式镶木地板文件python并且仅下采样

Posted

技术标签:

【中文标题】流式镶木地板文件python并且仅下采样【英文标题】:Streaming parquet file python and only downsampling 【发布时间】:2019-05-29 06:09:40 【问题描述】:

我有镶木地板格式的数据,它太大而无法放入内存 (6 GB)。我正在寻找一种使用 Python 3.6 读取和处理文件的方法。有没有办法流式传输文件、下采样并保存到dataframe?最终,我希望使用 dataframe 格式的数据。

在不使用 spark 框架的情况下尝试执行此操作是错误的吗?

我曾尝试使用 pyarrowfastparquet,但在尝试读取整个文件时出现内存错误。 任何提示或建议将不胜感激!

【问题讨论】:

【参考方案1】:

Spark 无疑是完成这项任务的可行选择。

我们计划今年在pyarrow 中添加流式读取逻辑(2019 年,请参阅https://issues.apache.org/jira/browse/ARROW-3771 和相关问题)。同时,我建议一次读取一个行组以减轻内存使用问题。您可以使用pyarrow.parquet.ParquetFile 及其read_row_group 方法来做到这一点

【讨论】:

感谢您的提示!我使用'num_row_groups'查询了文件,我的文件只有1个'row_group'。我认为这意味着我不会通过使用“read_row_group”获得任何好处? 不,当您编写包含多个行组的 Parquet 文件时,您只会从中受益。当使用pyarrow 编写它们时,您应该将chunk_size 参数设置为适合RAM 的行数。但请注意,您将此参数设置得越小,读取速度就越慢。您可能最好将其设置为 chunk_size=len(table) / 60,以便获得 100 MiB 块。 感谢您的建议,但我无法控制镶木地板文件格式。我认为我唯一的选择是使用 pyspark/spark 进行设置?【参考方案2】:

这不是答案,我在这里发帖是因为这是我可以在 *** 上找到的唯一相关帖子。我正在尝试使用 read_row_group 函数,但 python 只会以代码 139 退出。没有其他错误消息,不知道如何解决这个问题..

from pyarrow.parquet import ParquetFile
path = "sample.parquet"
f = ParquetFile(source = path)
print(f.num_row_groups) # it will print number of groups

# if I read the entire file:
df = f.read() # this works

# try to read row group
row_df = f.read_row_group(0)

# I get
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

Python 版本 3.6.3

pyarrow 版本 0.11.1

【讨论】:

请提出一个新问题。

以上是关于流式镶木地板文件python并且仅下采样的主要内容,如果未能解决你的问题,请参考以下文章

在没有熊猫的情况下从 Python 编写镶木地板文件

拥有一个大的镶木地板文件还是拥有许多较小的镶木地板文件更好?

我对镶木地板文件和 python 完全陌生,谁能告诉我如何在 pyspark 中读取带有标题的镶木地板文件

如何从 spark sql 访问本地镶木地板文件?

使用python将csv转换为镶木地板文件

Python:将熊猫数据框保存到镶木地板文件