我将大小(30 M x 25)的Python Pandas DataFrame保存为Apache Arrow表.然后,我在朱莉娅中读到的那张表格是:

input_arrow = Arrow.Table("path/to/table.arrow")

我的问题是如何以有效的方式迭代input_arrow行.

如果我只是这样做:

for c in input_arrow:
    # Do something

然后,我会迭代列,但我需要迭代行.

我try 过的其他方法是将Arrow.Table转换为DataFrames.DataFrame:

df = DataFrames.DataFrame(input_arrow)
for row in eachrow(df)
    # do something

但这种方法非常慢.它让我想起在Python中执行df.iterrows()是多么慢.

那么,哪种方法是在Julia中迭代Arrow.Table的最快方法(类似于df.itertuples())?

Solution

正如László Hunyadi在公认的解决方案中所建议的那样,将Arrow.Table转换为Tables.rowtable显示出显着的加速.

RAM有一个问题; Arrow.TableTables.rowtable不适合我的RAM,所以我必须按以下方式按块读取Arrow.Table:

for chunk in Arrow.Stream("/path/to/table.arrow")
    row_table = Tables.rowtable(chunk)
    # do something with row_table
end

推荐答案

使用Tables.jl中的Tables.rowtable将您的Arrow table转换为row-oriented table,以便您可以对其进行迭代.它非常高效,并且应该比首先转换为DataFrame快得多:

using Arrow, Tables
input_arrow = Arrow.Table("path/to/table.arrow")
row_table = Tables.rowtable(input_arrow)
for row in row_table
    # Do something with row
end

此方法将整个表加载为memory.如果它太大而无法容纳内存,请使用不同的方法,例如processing the table in chunks.

Python相关问答推荐

无法获得指数曲线_fit来处理日期

从Python调用GMP C函数时的分段错误和内存泄漏

如果我已经使用了time,如何要求Python在12秒后执行另一个操作.sleep

Python:记录而不是在文件中写入询问在多文件项目中记录的最佳实践

按照行主要蛇扫描顺序对点列表进行排序

Odoo -无法比较使用@api.depends设置计算字段的日期

添加包含中具有任何值的其他列的计数的列

根据网格和相机参数渲染深度

更改matplotlib彩色条的字体并勾选标签?

有症状地 destruct 了Python中的regex?

从numpy数组和参数创建收件箱

什么相当于pytorch中的numpy累积ufunc

Pandas - groupby字符串字段并按时间范围 Select

发生异常:TclMessage命令名称无效.!listbox"

通过pandas向每个非空单元格添加子字符串

实现自定义QWidgets作为QTimeEdit的弹出窗口

Asyncio:如何从子进程中读取stdout?

Plotly Dash Creating Interactive Graph下拉列表

从列表中获取n个元素,其中list [i][0]== value''

python sklearn ValueError:使用序列设置数组元素